|
1229 | 1229 | "network = init_network()\n",
|
1230 | 1230 | "\n",
|
1231 | 1231 | "accuracy_cnt = 0\n",
|
| 1232 | + "\n", |
1232 | 1233 | "for i in range(len(x)):\n",
|
1233 | 1234 | " y = predict(network, x[i])\n",
|
1234 | 1235 | " p = np.argmax(y)\n",
|
|
1250 | 1251 | "그 외에도 전체 데이터를 균일하게 분포시키는 데이터 **백색화**<sup>whitening</sup> 등도 존재한다."
|
1251 | 1252 | ]
|
1252 | 1253 | },
|
| 1254 | + { |
| 1255 | + "cell_type": "markdown", |
| 1256 | + "metadata": {}, |
| 1257 | + "source": [ |
| 1258 | + "### 3.6.3 배치 처리" |
| 1259 | + ] |
| 1260 | + }, |
1253 | 1261 | {
|
1254 | 1262 | "cell_type": "code",
|
1255 |
| - "execution_count": null, |
| 1263 | + "execution_count": 32, |
1256 | 1264 | "metadata": {},
|
1257 |
| - "outputs": [], |
1258 |
| - "source": [] |
| 1265 | + "outputs": [ |
| 1266 | + { |
| 1267 | + "name": "stdout", |
| 1268 | + "output_type": "stream", |
| 1269 | + "text": [ |
| 1270 | + "(10000, 784)\n", |
| 1271 | + "(784,)\n", |
| 1272 | + "(784, 50)\n", |
| 1273 | + "(50, 100)\n", |
| 1274 | + "(100, 10)\n" |
| 1275 | + ] |
| 1276 | + } |
| 1277 | + ], |
| 1278 | + "source": [ |
| 1279 | + "x, _ = get_data()\n", |
| 1280 | + "network = init_network()\n", |
| 1281 | + "\n", |
| 1282 | + "W1, W2, W3 = network['W1'], network['W2'], network['W3']\n", |
| 1283 | + "print(x.shape)\n", |
| 1284 | + "print(x[0].shape)\n", |
| 1285 | + "print(W1.shape)\n", |
| 1286 | + "print(W2.shape)\n", |
| 1287 | + "print(W3.shape)" |
| 1288 | + ] |
| 1289 | + }, |
| 1290 | + { |
| 1291 | + "cell_type": "markdown", |
| 1292 | + "metadata": {}, |
| 1293 | + "source": [ |
| 1294 | + "하나로 묶은 입력 데이터를 **배치**<sup>batch</sup>라 한다.\n", |
| 1295 | + "\n", |
| 1296 | + "**※ NOTE** \n", |
| 1297 | + "수치 계산 라이브러리 대부분이 큰 배열을 효율적으로 처리할 수 있도록 고도로 최적화되어 있다. \n", |
| 1298 | + "또한 느린 I/O를 통해 데이터를 읽는 횟수가 줄기 때문에 배치 처리를 수행함으로써 얻는 이점이 커지게 된다." |
| 1299 | + ] |
| 1300 | + }, |
| 1301 | + { |
| 1302 | + "cell_type": "code", |
| 1303 | + "execution_count": 36, |
| 1304 | + "metadata": {}, |
| 1305 | + "outputs": [ |
| 1306 | + { |
| 1307 | + "name": "stdout", |
| 1308 | + "output_type": "stream", |
| 1309 | + "text": [ |
| 1310 | + "Accuracy:0.9352\n" |
| 1311 | + ] |
| 1312 | + } |
| 1313 | + ], |
| 1314 | + "source": [ |
| 1315 | + "x, t = get_data()\n", |
| 1316 | + "network = init_network()\n", |
| 1317 | + "\n", |
| 1318 | + "batch_size = 100\n", |
| 1319 | + "accuracy_cnt = 0\n", |
| 1320 | + "\n", |
| 1321 | + "for i in range(0, len(x), batch_size):\n", |
| 1322 | + " x_batch = x[i:i+batch_size]\n", |
| 1323 | + " y_batch = predict(network, x_batch)\n", |
| 1324 | + " p = np.argmax(y_batch, axis=1)\n", |
| 1325 | + " \n", |
| 1326 | + " accuracy_cnt += np.sum(p == t[i:i+batch_size])\n", |
| 1327 | + " \n", |
| 1328 | + "print(\"Accuracy:\" + str(float(accuracy_cnt) / len(x)))" |
| 1329 | + ] |
| 1330 | + }, |
| 1331 | + { |
| 1332 | + "cell_type": "markdown", |
| 1333 | + "metadata": {}, |
| 1334 | + "source": [ |
| 1335 | + "## 3.7 정리\n", |
| 1336 | + "신경망은 각 층의 뉴런들이 다음 층의 뉴런으로 신호를 전달한다는 점에서 앞 장의 퍼셉트론과 같다. \n", |
| 1337 | + "하지만 신경망에서는 활성화 함수로 시그모이드 함수를, 퍼셉트론에서는 계단 함수를 활성화 함수로 사용했다. \n", |
| 1338 | + "이 차이가 신경망 학습에 중요한 점이다." |
| 1339 | + ] |
1259 | 1340 | }
|
1260 | 1341 | ],
|
1261 | 1342 | "metadata": {
|
|
0 commit comments