2017-12-02 17 views
0

저는 길쌈 신경 네트워크를 Python으로 구현하려고합니다. 아키텍처는 다음과 같습니다 :
INPUT->[Convolution->Sigmoid->Pooling]->[Convolution->Sigmoid->Pooling]->Fully Connected Layer-> Hidden Layer->Ouput.

입력 형태 20 * 1 * 5 * 5
필터/가중치 컨벌루션 계층 2에 대해 형성 : 40 * 20 * 5 * 5
활성화 기능 : S 상을 (28 개 * 28 개
필터/가중치 컨벌루션 Layer1을위한 모양Sigmoid 활성화가있는 신경망이 모두 1을 생성합니다.

필터/웨이트의 큰 형태 때문에, 쇄석 층 2에서 내적을 적용하는 동안, 결과 출력 값은 20에 가깝게되고 그 결과로 결과적으로 시그 모이 드 활성화 함수 값이 모두 1 인 출력. 길쌈의 레이어 1에서

출력 : 길쌈의 계층 2에서

[ 0.75810452 0.79819809 0.70897314 0.50897858 0.02901152 0.98447587 
0.99995668 0.99999814 0.99912627 0.7885211 0.87708188 0.76611807] 
... 
... 

출력 :

[ 19.88641441 20.11005634 20.04984707 20.19106394 19.93096274 
20.1585536 19.84757161 19.79030395] 
... 
... 

출력 convlayer2에 시그 모이 드를 적용한 후 :

[ 1. 1. 1. 1. 1. 1. 1. 1.] 
... 
... 
[ 1. 1. 1. 0.99999 1. 1. 1. 1.] 

나는 이것에 비슷한 질문을 발견했다 포럼 : Neural Network sigmoid function. 나는 팀의 대답에서 지적한 실수를 저 지르지 않았다. 심지어 이러한 변경, 아마 여전히 출력에 대한 모든 일의의를 생성합니다 모든 긍정적 인 무게와 완전히 연결된 신경 네트워크, 마지막으로

: 하지만 난 알아낼 수없는 어떤이 있었다. 억제 노드에 해당하는 음수 가중치를 포함하거나 연결을 상당히 줄일 수 있습니다 (예 : 계층 n의 노드가 계층 n + 1의 노드에 연결하는 확률이 0.1 인 경우).

convlayer2에서 Sigmoid를 적용한 후 출력을 정규화해야합니까? 또는 다른 것을 시도해보십시오.

EDIT : 입력 데이터 :

 [[-0.02894977 -0.00163836 0.0416469 -0.00195158 0.03194728] 
    [ 0.02618844 -0.00961595 -0.03348994 0.04460359 0.03113144] 
    [ 0.04166139 -0.02487885 0.02173471 -0.00147136 0.00803713] 
    [ 0.02262536 -0.03310476 -0.00949261 -0.0450313 0.03128755] 
    [-0.01181284 0.00558957 -0.02410718 0.01706195 0.01151338]] 

[[ 0.04118888 -0.01306432 -0.01013332 0.03423443 0.03135569] 
    [ 0.00471491 0.02169717 0.00583819 -0.02421325 -0.01708062] 
    [-0.01244262 -0.00934037 0.00605259 -0.03825137 -0.00606101] 
    [-0.01699741 0.01311037 0.0307442 0.04153474 -0.00470464] 
    [-0.02592571 -0.01203504 0.04052782 0.03150989 0.02740532]] 
    ......... 
    ......... 

가중치 자이 초기화를 이용하여 초기화되었다 : convlayer 2에서

 [[[-0.01216923 -0.00584966 0.04876327 0.04628595 0.05644253] 
     [-0.03813031 -0.0304277 0.05728934 -0.01358741 -0.02875361] 
     [ 0.04929296 0.05958448 0.05497736 0.04699187 -0.04964543] 
     [ 0.01874465 0.05793848 0.03988833 -0.02355133 -0.05672331] 
     [ 0.03986748 -0.06098319 0.01299825 -0.00239702 -0.01750711]]] 
    [[[-0.02474246 0.0423619 -0.02130952 0.00718671 0.02677802] 
     [ 0.04151089 0.04336411 -0.03549197 -0.01935773 0.04035303] 
     [ 0.01466489 -0.01117737 0.0081063 0.01310948 0.01900553] 
     [-0.01723775 0.0148552 -0.03563556 -0.04108806 0.01764391] 
     [ 0.03932499 -0.00911049 0.00443425 -0.0388128 0.01646769]] 
    ........... 
    ........... 

가중치 : convlayer 1

[[ 3. 0. 0. 3. 7. 3. 0. 3. 0. 11. 0. 0. 
     3. 0. 0. 3. 8. 0. 0. 3. 0. 0. 0. 2. 
     0. 0. 0. 0.] 
    [ 0. 0. 0. 0. 0. 0. 0. 1. 5. 0. 12. 0. 
     16. 0. 0. 4. 0. 2. 8. 3. 0. 4. 8. 0. 
     0. 0. 0. 0.] 
    [ 0. 0. 2. 0. 0. 0. 1. 2. 1. 12. 0. 8. 
     0. 0. 6. 0. 11. 0. 0. 6. 7. 2. 0. 0. 
     0. 0. 0. 0.] 
    [ 0. 1. 3. 0. 0. 2. 3. 0. 0. 0. 12. 0. 
     0. 23. 0. 0. 0. 0. 11. 3. 0. 0. 4. 0. 
     0. 0. 0. 0.] 
    [ 0. 1. 1. 0. 0. 2. 0. 0. 6. 0. 25. 27. 
     136. 135. 188. 89. 84. 25. 0. 0. 3. 1. 0. 0. 
     0. 0. 0. 0.] 
    [ 4. 0. 0. 0. 0. 0. 0. 0. 3. 88. 247. 236. 
     255. 249. 250. 227. 240. 136. 37. 1. 0. 2. 2. 0. 
     0. 0. 0. 0.] 
    [ 2. 0. 0. 3. 0. 0. 4. 27. 193. 251. 253. 255. 
     255. 255. 255. 240. 254. 255. 213. 89. 0. 0. 14. 1. 
     0. 0. 0. 0.] 
    [ 0. 0. 0. 6. 0. 0. 18. 56. 246. 255. 253. 243. 
     251. 255. 245. 255. 255. 254. 255. 231. 119. 7. 0. 5. 
     0. 0. 0. 0.] 
    [ 4. 0. 0. 12. 13. 0. 65. 190. 246. 255. 255. 251. 
     255. 109. 88. 199. 255. 247. 250. 255. 234. 92. 0. 0. 
     0. 0. 0. 0.] 
    [ 0. 10. 1. 0. 0. 18. 163. 248. 255. 235. 216. 150. 
     128. 45. 6. 8. 22. 212. 255. 255. 252. 172. 0. 15. 
     0. 0. 0. 0.] 
    [ 0. 1. 4. 5. 0. 0. 187. 255. 254. 94. 57. 7. 
     1. 0. 6. 0. 0. 139. 242. 255. 255. 218. 62. 0. 
     0. 0. 0. 0.] 
    [ 5. 2. 0. 0. 11. 56. 252. 235. 253. 20. 5. 2. 
     5. 1. 0. 1. 2. 0. 97. 249. 248. 249. 166. 8. 
     0. 0. 0. 0.] 
    [ 0. 0. 2. 0. 0. 70. 255. 255. 245. 25. 10. 0. 
     0. 1. 0. 4. 10. 0. 10. 255. 246. 250. 155. 0. 
     0. 0. 0. 0.] 
    [ 2. 0. 7. 12. 0. 87. 226. 255. 184. 0. 3. 0. 
     10. 5. 0. 0. 0. 9. 0. 183. 251. 255. 222. 15. 
     0. 0. 0. 0.] 
    [ 0. 5. 1. 0. 19. 230. 255. 243. 255. 35. 2. 0. 
     0. 0. 0. 9. 8. 0. 0. 70. 245. 242. 255. 14. 
     0. 0. 0. 0.] 
    [ 0. 4. 3. 0. 19. 251. 239. 255. 247. 30. 1. 0. 
     4. 4. 14. 0. 0. 2. 0. 47. 255. 255. 247. 21. 
     0. 0. 0. 0.] 
    [ 6. 0. 2. 2. 0. 173. 247. 252. 250. 28. 10. 0. 
     0. 8. 0. 0. 0. 8. 0. 67. 249. 255. 255. 12. 
     0. 0. 0. 0.] 
    [ 0. 0. 6. 3. 0. 88. 255. 251. 255. 188. 21. 0. 
     15. 0. 8. 2. 16. 0. 35. 200. 247. 251. 134. 4. 
     0. 0. 0. 0.] 
    [ 0. 3. 3. 1. 0. 11. 211. 247. 249. 255. 189. 76. 
     0. 0. 4. 0. 2. 0. 169. 255. 255. 247. 47. 0. 
     0. 0. 0. 0.] 
    [ 0. 6. 0. 0. 2. 0. 59. 205. 255. 240. 255. 182. 
     41. 56. 28. 33. 42. 239. 246. 251. 238. 157. 0. 1. 
     0. 0. 0. 0.] 
    [ 2. 1. 0. 0. 2. 10. 0. 104. 239. 255. 240. 255. 
     253. 247. 237. 255. 255. 250. 255. 239. 255. 100. 0. 1. 
     0. 0. 0. 0.] 
    [ 1. 0. 3. 0. 0. 7. 0. 4. 114. 255. 255. 255. 
     255. 247. 249. 253. 251. 254. 237. 251. 89. 0. 0. 1. 
     0. 0. 0. 0.] 
    [ 0. 0. 9. 0. 0. 1. 13. 0. 14. 167. 255. 246. 
     253. 255. 255. 254. 242. 255. 244. 61. 0. 19. 0. 1. 
     0. 0. 0. 0.] 
    [ 2. 1. 7. 0. 0. 4. 0. 14. 0. 27. 61. 143. 
     255. 255. 252. 255. 149. 21. 6. 16. 0. 0. 7. 0. 
     0. 0. 0. 0.] 
    [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0.] 
    [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0.] 
    [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0.] 
    [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 
     0. 0. 0. 0.]] 

가중치

n_in=28*28 
n_out = 24*24 
w_bound = numpy.sqrt(6./float(n_in+n_out)) 

filters = numpy.random.uniform(-w_bound,w_bound,(40,20, 5,5)) 
+0

약간의 교육 전후에 있나요? 어떻게 네트워크를 초기화합니까? 데이터가 어떻게 보이며 정규화 되었습니까? – Andnp

+0

@Andnp 교육하기 전에; 이것은 첫 번째 반복 직후에 발생합니다. Xavier 초기화를 사용하여 가중치를 초기화했습니다. 입력 데이터는 픽셀로 변환 된 이미지이고 범위는 [0,255]입니다. 음수 값을 포함하지 않으며 정규화되지 않습니다. 내가 입력을 [-1,1]로 정상화해야 하는가? - 왜? 질문에 필요한 세부 사항을 편집했습니다. – uttejh

답변

0

1- 출력을 0과 1 사이에서 정규화 했습니까? 그렇지 않은 경우 1보다 큰 모든 출력이 1이됩니다.

2- 입력 데이터를 표준화하고 가장 큰 RGB 값인 255로 나눕니다.

3에서이 문제를 확실히 있습니다 : 길쌈의 계층 2에서 출력 :

[19.88641441 20.11005634 20.04984707 20.19106394 19.93096274 20.1585536 19.84757161 (19).79030395]

이 숫자는 가능하지 않습니다. 어떻게 전송자를 초기화합니까? 0과 1 사이에서 초기화해야합니다.

또한 Conv를 정규화해야합니다. 이렇게하려면 교육적인 목적으로이 구현을하고 있다고 가정하고 모든 전환의 출력에 시그 모이 드를 적용합니다. 이렇게하면 전환 가치는 올라가지 않습니다. 일반적으로 RELU 활성화는 길쌈 레이어를 사용하면 더 나은 결과를 얻을 수 있지만 Sigmoid에서도 좋은 결과를 얻을 수 있습니다.