examples/Chinese-multiperson-voice-r.../vgg16.ipynb

1009 lines
125 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"#匯入訓練、驗證、測試圖像\n",
"import os,shutil\n",
"\n",
"base_dir = 'Rec'\n",
"if not os.path.isdir(base_dir):\n",
" os.mkdir(base_dir)\n",
" \n",
"train_dir = os.path.join(base_dir, 'train')\n",
"os.mkdir(train_dir)\n",
"validation_dir = os.path.join(base_dir, 'validation')\n",
"os.mkdir(validation_dir)\n",
"test_dir = os.path.join(base_dir, 'test')\n",
"os.mkdir(test_dir)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"#建立訓練集資料夾\n",
"train_b_dir = os.path.join(train_dir, 'be')\n",
"os.mkdir(train_b_dir)\n",
"\n",
"train_h_dir = os.path.join(train_dir, 'ho')\n",
"os.mkdir(train_h_dir)\n",
"\n",
"\n",
"train_y_dir = os.path.join(train_dir, 'yun')\n",
"os.mkdir(train_y_dir)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"#建立驗證集資料夾\n",
"validation_b_dir = os.path.join(validation_dir, 'be')\n",
"os.mkdir(validation_b_dir)\n",
"\n",
"validation_h_dir = os.path.join(validation_dir, 'ho')\n",
"os.mkdir(validation_h_dir)\n",
"\n",
"validation_y_dir = os.path.join(validation_dir, 'yun')\n",
"os.mkdir(validation_y_dir)\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"#建立測試集資料夾\n",
"test_b_dir = os.path.join(test_dir, 'be')\n",
"os.mkdir(test_b_dir)\n",
"\n",
"test_h_dir = os.path.join(test_dir, 'ho')\n",
"os.mkdir(test_h_dir)\n",
"\n",
"test_y_dir = os.path.join(test_dir, 'yun')\n",
"os.mkdir(test_y_dir)\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"#擷取be資料集的圖片範圍\n",
"original_0dataset_dir = 'be'\n",
"fnames = ['be.{}.png'.format(i) for i in range(20)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(train_b_dir, fname)\n",
" shutil.copyfile(src, dst)\n",
"\n",
"fnames = ['be.{}.png'.format(i) for i in range(45, 54)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(validation_b_dir, fname)\n",
" shutil.copyfile(src, dst)\n",
"\n",
"fnames = ['be.{}.png'.format(i) for i in range(54, 59)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(test_b_dir, fname)\n",
" shutil.copyfile(src, dst)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"#擷取ho資料集的圖片範圍\n",
"original_0dataset_dir = 'ho'\n",
"fnames = ['ho.{}.png'.format(i) for i in range(20)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(train_h_dir, fname)\n",
" shutil.copyfile(src, dst)\n",
"\n",
"fnames = ['ho.{}.png'.format(i) for i in range(45, 54)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(validation_h_dir, fname)\n",
" shutil.copyfile(src, dst)\n",
"\n",
"fnames = ['ho.{}.png'.format(i) for i in range(54, 59)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(test_h_dir, fname)\n",
" shutil.copyfile(src, dst)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"#擷取yun資料集的圖片範圍\n",
"original_0dataset_dir = 'yun'\n",
"fnames = ['yun.{}.png'.format(i) for i in range(20)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(train_y_dir, fname)\n",
" shutil.copyfile(src, dst)\n",
"\n",
"fnames = ['yun.{}.png'.format(i) for i in range(45, 54)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(validation_y_dir, fname)\n",
" shutil.copyfile(src, dst)\n",
"\n",
"fnames = ['yun.{}.png'.format(i) for i in range(54, 59)]\n",
"for fname in fnames:\n",
" src = os.path.join(original_0dataset_dir, fname)\n",
" dst = os.path.join(test_y_dir, fname)\n",
" shutil.copyfile(src, dst)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"12"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(test_y_dir)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Using TensorFlow backend.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"sequential_1\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"conv2d_1 (Conv2D) (None, 98, 98, 32) 896 \n",
"_________________________________________________________________\n",
"max_pooling2d_1 (MaxPooling2 (None, 49, 49, 32) 0 \n",
"_________________________________________________________________\n",
"conv2d_2 (Conv2D) (None, 47, 47, 64) 18496 \n",
"_________________________________________________________________\n",
"max_pooling2d_2 (MaxPooling2 (None, 23, 23, 64) 0 \n",
"_________________________________________________________________\n",
"conv2d_3 (Conv2D) (None, 21, 21, 128) 73856 \n",
"_________________________________________________________________\n",
"max_pooling2d_3 (MaxPooling2 (None, 10, 10, 128) 0 \n",
"_________________________________________________________________\n",
"conv2d_4 (Conv2D) (None, 8, 8, 128) 147584 \n",
"_________________________________________________________________\n",
"max_pooling2d_4 (MaxPooling2 (None, 4, 4, 128) 0 \n",
"_________________________________________________________________\n",
"flatten_1 (Flatten) (None, 2048) 0 \n",
"_________________________________________________________________\n",
"dense_1 (Dense) (None, 512) 1049088 \n",
"_________________________________________________________________\n",
"dense_2 (Dense) (None, 3) 1539 \n",
"=================================================================\n",
"Total params: 1,291,459\n",
"Trainable params: 1,291,459\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"#建立cnn\n",
"from keras import layers\n",
"from keras import models\n",
"\n",
"model = models.Sequential()\n",
"model.add(layers.Conv2D(32, (3, 3), activation='relu',\n",
" input_shape=(100, 100, 3)))\n",
"model.add(layers.MaxPooling2D((2, 2)))\n",
"model.add(layers.Conv2D(64, (3, 3), activation='relu'))\n",
"model.add(layers.MaxPooling2D((2, 2)))\n",
"model.add(layers.Conv2D(128, (3, 3), activation='relu'))\n",
"model.add(layers.MaxPooling2D((2, 2)))\n",
"model.add(layers.Conv2D(128, (3, 3), activation='relu'))\n",
"model.add(layers.MaxPooling2D((2, 2)))\n",
"model.add(layers.Flatten())\n",
"model.add(layers.Dense(512, activation='relu'))\n",
"model.add(layers.Dense(3, activation='softmax'))\n",
"\n",
"model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"#優化器\n",
"from keras import optimizers\n",
"\n",
"model.compile(loss='categorical_crossentropy',\n",
" optimizer=optimizers.RMSprop(lr=1e-4),\n",
" metrics=['acc'])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 60 images belonging to 3 classes.\n",
"Found 27 images belonging to 3 classes.\n"
]
}
],
"source": [
"#ImageDataGenerator套件label圖片\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"import numpy as np\n",
"train_datagen = ImageDataGenerator(rescale=1./255)\n",
"test_datagen = ImageDataGenerator(rescale=1./255)\n",
"\n",
"train_generator = train_datagen.flow_from_directory(\n",
" train_dir,\n",
" target_size=(100, 100),\n",
" batch_size=20,\n",
" class_mode='categorical')\n",
"\n",
"validation_generator = test_datagen.flow_from_directory(\n",
" validation_dir,\n",
" target_size=(100, 100),\n",
" batch_size=20,\n",
" class_mode='categorical')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"data batch shape: (20, 100, 100, 3)\n",
"labels batch shape: (20, 3)\n"
]
}
],
"source": [
"for data_batch, labels_batch in train_generator:\n",
" print('data batch shape:', data_batch.shape)\n",
" print('labels batch shape:', labels_batch.shape)\n",
" break"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Epoch 1/30\n",
"100/100 [==============================] - 94s 940ms/step - loss: 0.6316 - acc: 0.7760 - val_loss: 0.8940 - val_acc: 0.7778\n",
"Epoch 2/30\n",
"100/100 [==============================] - 93s 930ms/step - loss: 0.4135 - acc: 0.8530 - val_loss: 0.6577 - val_acc: 0.7037\n",
"Epoch 3/30\n",
"100/100 [==============================] - 94s 941ms/step - loss: 0.2813 - acc: 0.8860 - val_loss: 0.6228 - val_acc: 0.6296\n",
"Epoch 4/30\n",
"100/100 [==============================] - 93s 933ms/step - loss: 0.1676 - acc: 0.9280 - val_loss: 1.7445 - val_acc: 0.5926\n",
"Epoch 5/30\n",
"100/100 [==============================] - 94s 939ms/step - loss: 0.1259 - acc: 0.9370 - val_loss: 1.0945 - val_acc: 0.5926\n",
"Epoch 6/30\n",
"100/100 [==============================] - 94s 942ms/step - loss: 0.1062 - acc: 0.9405 - val_loss: 2.6368 - val_acc: 0.5926\n",
"Epoch 7/30\n",
"100/100 [==============================] - 96s 960ms/step - loss: 0.0993 - acc: 0.9390 - val_loss: 1.2031 - val_acc: 0.5926\n",
"Epoch 8/30\n",
"100/100 [==============================] - 95s 954ms/step - loss: 0.0951 - acc: 0.9305 - val_loss: 2.8705 - val_acc: 0.5926\n",
"Epoch 9/30\n",
"100/100 [==============================] - 96s 957ms/step - loss: 0.0892 - acc: 0.9385 - val_loss: 2.4154 - val_acc: 0.5926\n",
"Epoch 10/30\n",
"100/100 [==============================] - 97s 966ms/step - loss: 0.0860 - acc: 0.9365 - val_loss: 4.6667 - val_acc: 0.5926\n",
"Epoch 11/30\n",
"100/100 [==============================] - 97s 970ms/step - loss: 0.0860 - acc: 0.9365 - val_loss: 2.0964 - val_acc: 0.5926\n",
"Epoch 12/30\n",
"100/100 [==============================] - 97s 973ms/step - loss: 0.0844 - acc: 0.9365 - val_loss: 4.6467 - val_acc: 0.5926\n",
"Epoch 13/30\n",
"100/100 [==============================] - 97s 969ms/step - loss: 0.0842 - acc: 0.9365 - val_loss: 0.8492 - val_acc: 0.5926\n",
"Epoch 14/30\n",
"100/100 [==============================] - 97s 972ms/step - loss: 0.0811 - acc: 0.9345 - val_loss: 6.7441 - val_acc: 0.5926\n",
"Epoch 15/30\n",
"100/100 [==============================] - 97s 971ms/step - loss: 0.0801 - acc: 0.9380 - val_loss: 1.3565 - val_acc: 0.5926\n",
"Epoch 16/30\n",
"100/100 [==============================] - 97s 973ms/step - loss: 0.0775 - acc: 0.9315 - val_loss: 5.6226 - val_acc: 0.5926\n",
"Epoch 17/30\n",
"100/100 [==============================] - 98s 983ms/step - loss: 0.0816 - acc: 0.9315 - val_loss: 5.0703 - val_acc: 0.5926\n",
"Epoch 18/30\n",
"100/100 [==============================] - 98s 984ms/step - loss: 0.0746 - acc: 0.9330 - val_loss: 7.8723 - val_acc: 0.5926\n",
"Epoch 19/30\n",
"100/100 [==============================] - 98s 983ms/step - loss: 0.0747 - acc: 0.9360 - val_loss: 2.2070 - val_acc: 0.5926\n",
"Epoch 20/30\n",
"100/100 [==============================] - 98s 979ms/step - loss: 0.0756 - acc: 0.9320 - val_loss: 8.8935 - val_acc: 0.5926\n",
"Epoch 21/30\n",
"100/100 [==============================] - 98s 983ms/step - loss: 0.0775 - acc: 0.9350 - val_loss: 2.1388 - val_acc: 0.5926\n",
"Epoch 22/30\n",
"100/100 [==============================] - 98s 984ms/step - loss: 0.0734 - acc: 0.9360 - val_loss: 4.9511 - val_acc: 0.5926\n",
"Epoch 23/30\n",
"100/100 [==============================] - 98s 982ms/step - loss: 0.0729 - acc: 0.9335 - val_loss: 1.6979 - val_acc: 0.5926\n",
"Epoch 24/30\n",
"100/100 [==============================] - 99s 988ms/step - loss: 0.0718 - acc: 0.9325 - val_loss: 3.6615 - val_acc: 0.5926\n",
"Epoch 25/30\n",
"100/100 [==============================] - 98s 983ms/step - loss: 0.0729 - acc: 0.9375 - val_loss: 6.6448 - val_acc: 0.5926\n",
"Epoch 26/30\n",
"100/100 [==============================] - 98s 984ms/step - loss: 0.0721 - acc: 0.9355 - val_loss: 6.3982 - val_acc: 0.5926\n",
"Epoch 27/30\n",
"100/100 [==============================] - 98s 980ms/step - loss: 0.0711 - acc: 0.9340 - val_loss: 12.2808 - val_acc: 0.5926\n",
"Epoch 28/30\n",
"100/100 [==============================] - 98s 980ms/step - loss: 0.0721 - acc: 0.9365 - val_loss: 7.8047 - val_acc: 0.5926\n",
"Epoch 29/30\n",
"100/100 [==============================] - 98s 980ms/step - loss: 0.0704 - acc: 0.9310 - val_loss: 9.7293 - val_acc: 0.5926\n",
"Epoch 30/30\n",
"100/100 [==============================] - 98s 982ms/step - loss: 0.0737 - acc: 0.9360 - val_loss: 6.4731 - val_acc: 0.5926\n"
]
}
],
"source": [
"#epoch訓練30\n",
"history = model.fit_generator(\n",
" train_generator,\n",
" steps_per_epoch=100,\n",
" epochs=30,\n",
" validation_data=validation_generator,\n",
" validation_steps=50)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"model.save('train1.h5')"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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OHK8lOMlZRwvLStfdr4mcRHB5atudnAk3MnxEbSLDScsOJDgQCEkMICgwACCA4XggIA6T+r0Bk2uG8HEiRO59NJLmTVrVvm2a665hksuuYT09HT69u1Lt241d3647bbbuP766+nduzd9+/Zl4MCBgG2H169fP3r27EmnTp0YOnRo+TE333wzo0ePpm3btsybN698e//+/Zk8eXL5OW688Ub69etXZQlIZfPnz6d9+/bliTXYZD0jI4Ndu3bx1ltvccstt/Dggw8SHBzMe++9x6hRo1i1ahXp6emEhIRw4YUX8re//Y177rmHK664grfeeotzzz232tes7r3q2bMn999/P2effTaBgYH069eP119/vfyYBx54oMIfNH4vNhmCwqCkUNvwKaWUahStY8IY1avqktWalJYZm2iXlFFUWlr+dUFRCdkHjrF9/1F27D/K9v1HycjJ56u1uykurT0hDwwQggOF0KBAUltG0LlVFGmtoklrFUVa6yiS4ry/fL3UVCLgT9LT082KFSsqbFu3bh3du3f3UkTKm95//30+/vjjGkfk/fL746VhkLcJ/pQDAYHejkZVQ0RWGmOqb0Kv6q2qa71Syv+Vlhn25Beyff9Rdh8qLB8BLy4to6TUlH9tb4ajx0vIzDvKpr2H2ZNfVH6eUEcHlrRWUXROjEIEO8pePupeXPFxUQlXnZHM1NF1a29b03VeR65Vk/Pb3/6WOXPmNGhfb5/R8WyIaqOJtVJKqSYlMEBoFxtOu9iT2//WJr+wmM17C9i8p4BNew+zaW8BK7PsIj0AYcEBRIUGExMWVF4vnhwfQVRYENGO1TkbkibXqsn597//7e0QPOeCx7wdgVJKKeVTYsKC6Z8cR//kuArbC4tLHWUkAY0ajybXSimllFKqyQkL9s6nvI2byntBU6kpVw1Lvy+UUkop5QlNOrkOCwtj3759mkipCowx7Nu3r3yRG6WUUkqphtKky0KSkpLIzs4mNzfX26EoHxMWFkZSUpK3w1CqSRORUcA/gUDgVWPM45Wevxu4ESgBcoEbjDE1N/1XSikf59Hk2o0L62TgSWCnY9NzxphXHc9dBzzg2P6oMeaNur5+cHAwHTt2rGf0Siml6ktEAoHngZFANrBcRGYbYzJcdvsJSDfGHBWR24AngCsbP1qllGo4Hkuu3bywArxrjJlS6dh44C9AOmCA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\n",
"text/plain": [
"<Figure size 864x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#可視化結果\n",
"f, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))\n",
"t = f.suptitle('Basic CNN Performance', fontsize=12)\n",
"f.subplots_adjust(top=0.85, wspace=0.3)\n",
"\n",
"epoch_list = list(range(1,31))\n",
"ax1.plot(epoch_list, history.history['acc'], label='Train Accuracy')\n",
"ax1.plot(epoch_list, history.history['val_acc'], label='Validation Accuracy')\n",
"ax1.set_xticks(np.arange(0, 31, 5))\n",
"ax1.set_ylabel('Accuracy Value')\n",
"ax1.set_xlabel('Epoch')\n",
"ax1.set_title('Accuracy')\n",
"l1 = ax1.legend(loc=\"best\")\n",
"\n",
"ax2.plot(epoch_list, history.history['loss'], label='Train Loss')\n",
"ax2.plot(epoch_list, history.history['val_loss'], label='Validation Loss')\n",
"ax2.set_xticks(np.arange(0, 31, 5))\n",
"ax2.set_ylabel('Loss Value')\n",
"ax2.set_xlabel('Epoch')\n",
"ax2.set_title('Loss')\n",
"l2 = ax2.legend(loc=\"best\")"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"sequential_2\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"conv2d_5 (Conv2D) (None, 98, 98, 32) 896 \n",
"_________________________________________________________________\n",
"max_pooling2d_5 (MaxPooling2 (None, 49, 49, 32) 0 \n",
"_________________________________________________________________\n",
"conv2d_6 (Conv2D) (None, 47, 47, 64) 18496 \n",
"_________________________________________________________________\n",
"max_pooling2d_6 (MaxPooling2 (None, 23, 23, 64) 0 \n",
"_________________________________________________________________\n",
"conv2d_7 (Conv2D) (None, 21, 21, 128) 73856 \n",
"_________________________________________________________________\n",
"max_pooling2d_7 (MaxPooling2 (None, 10, 10, 128) 0 \n",
"_________________________________________________________________\n",
"conv2d_8 (Conv2D) (None, 8, 8, 128) 147584 \n",
"_________________________________________________________________\n",
"max_pooling2d_8 (MaxPooling2 (None, 4, 4, 128) 0 \n",
"_________________________________________________________________\n",
"flatten_2 (Flatten) (None, 2048) 0 \n",
"_________________________________________________________________\n",
"dropout_1 (Dropout) (None, 2048) 0 \n",
"_________________________________________________________________\n",
"dense_3 (Dense) (None, 512) 1049088 \n",
"_________________________________________________________________\n",
"dense_4 (Dense) (None, 3) 1539 \n",
"=================================================================\n",
"Total params: 1,291,459\n",
"Trainable params: 1,291,459\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"#套入VGG16模型\n",
"from keras.applications import VGG16\n",
"\n",
"\n",
"conv_base = VGG16(weights='imagenet',\n",
" include_top=False,\n",
" input_shape=(100,100, 3))\n",
"model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Found 60 images belonging to 3 classes.\n",
"[[1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]]\n",
"[[0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 1. 0.]]\n",
"[[0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 1. 0.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]]\n",
"Found 27 images belonging to 3 classes.\n",
"[[0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]]\n",
"Found 15 images belonging to 3 classes.\n",
"[[0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [1. 0. 0.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]\n",
" [0. 0. 1.]\n",
" [0. 0. 1.]\n",
" [0. 1. 0.]\n",
" [1. 0. 0.]]\n"
]
}
],
"source": [
"#使用conv_base的模型先抽取特徵跟label產出將特徵提取後進行降維輸出\n",
"import os\n",
"import numpy as np\n",
"from keras.preprocessing.image import ImageDataGenerator\n",
"\n",
"base_dir = 'Rec'\n",
"\n",
"train_dir = os.path.join(base_dir, 'train')\n",
"validation_dir = os.path.join(base_dir, 'validation')\n",
"test_dir = os.path.join(base_dir, 'test')\n",
"\n",
"datagen = ImageDataGenerator(rescale=1./255)\n",
"batch_size = 20\n",
"\n",
"def extract_features(directory, sample_count):\n",
" features = np.zeros(shape=(sample_count, 3, 3, 512))\n",
" labels = np.zeros(shape=(sample_count,3))\n",
" generator = datagen.flow_from_directory(\n",
" directory,\n",
" target_size=(100, 100),\n",
" batch_size=batch_size,\n",
" class_mode='categorical'\n",
" )\n",
" i = 0\n",
" for inputs_batch, labels_batch in generator:\n",
" features_batch = conv_base.predict(inputs_batch)\n",
" features[i * batch_size : (i + 1) * batch_size] = features_batch\n",
" print(labels_batch)\n",
" labels[i * batch_size : (i + 1) * batch_size] = labels_batch\n",
" i += 1\n",
" if i * batch_size >= sample_count:\n",
" \n",
" break\n",
" return features, labels\n",
"\n",
"train_features, train_labels = extract_features(train_dir, 60)\n",
"validation_features, validation_labels = extract_features(validation_dir, 20)\n",
"test_features, test_labels = extract_features(test_dir, 15)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"train_features = np.resize(train_features, (60, 3 * 3 * 512))\n",
"validation_features = np.resize(validation_features, (20, 3 * 3 * 512))\n",
"test_features = np.resize(test_features, (15, 3 * 3 * 512))"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train on 60 samples, validate on 20 samples\n",
"Epoch 1/30\n",
"60/60 [==============================] - 1s 10ms/step - loss: 2.0313 - acc: 0.3167 - val_loss: 1.8868 - val_acc: 0.3000\n",
"Epoch 2/30\n",
"60/60 [==============================] - 0s 483us/step - loss: 1.8181 - acc: 0.3333 - val_loss: 1.7381 - val_acc: 0.3000\n",
"Epoch 3/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 1.6853 - acc: 0.3000 - val_loss: 1.6217 - val_acc: 0.3000\n",
"Epoch 4/30\n",
"60/60 [==============================] - 0s 550us/step - loss: 1.6355 - acc: 0.3167 - val_loss: 1.5229 - val_acc: 0.3000\n",
"Epoch 5/30\n",
"60/60 [==============================] - 0s 483us/step - loss: 1.5393 - acc: 0.3333 - val_loss: 1.4473 - val_acc: 0.3000\n",
"Epoch 6/30\n",
"60/60 [==============================] - 0s 550us/step - loss: 1.5782 - acc: 0.2833 - val_loss: 1.3734 - val_acc: 0.3000\n",
"Epoch 7/30\n",
"60/60 [==============================] - 0s 533us/step - loss: 1.4986 - acc: 0.2833 - val_loss: 1.3062 - val_acc: 0.3000\n",
"Epoch 8/30\n",
"60/60 [==============================] - 0s 500us/step - loss: 1.4321 - acc: 0.3667 - val_loss: 1.2484 - val_acc: 0.3000\n",
"Epoch 9/30\n",
"60/60 [==============================] - 0s 583us/step - loss: 1.3253 - acc: 0.3333 - val_loss: 1.1981 - val_acc: 0.3000\n",
"Epoch 10/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 1.2468 - acc: 0.4167 - val_loss: 1.1543 - val_acc: 0.3000\n",
"Epoch 11/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 1.1066 - acc: 0.4500 - val_loss: 1.1124 - val_acc: 0.3000\n",
"Epoch 12/30\n",
"60/60 [==============================] - 0s 600us/step - loss: 1.2571 - acc: 0.3333 - val_loss: 1.0764 - val_acc: 0.3000\n",
"Epoch 13/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 1.1691 - acc: 0.4667 - val_loss: 1.0375 - val_acc: 0.3500\n",
"Epoch 14/30\n",
"60/60 [==============================] - 0s 550us/step - loss: 1.1005 - acc: 0.5167 - val_loss: 1.0097 - val_acc: 0.3500\n",
"Epoch 15/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 1.1293 - acc: 0.4167 - val_loss: 0.9818 - val_acc: 0.4000\n",
"Epoch 16/30\n",
"60/60 [==============================] - 0s 516us/step - loss: 1.1421 - acc: 0.4167 - val_loss: 0.9571 - val_acc: 0.4000\n",
"Epoch 17/30\n",
"60/60 [==============================] - 0s 533us/step - loss: 1.0784 - acc: 0.5000 - val_loss: 0.9312 - val_acc: 0.5500\n",
"Epoch 18/30\n",
"60/60 [==============================] - 0s 516us/step - loss: 1.0378 - acc: 0.4500 - val_loss: 0.9119 - val_acc: 0.6000\n",
"Epoch 19/30\n",
"60/60 [==============================] - 0s 533us/step - loss: 0.9446 - acc: 0.5000 - val_loss: 0.8883 - val_acc: 0.7500\n",
"Epoch 20/30\n",
"60/60 [==============================] - 0s 533us/step - loss: 0.9756 - acc: 0.5167 - val_loss: 0.8679 - val_acc: 0.7500\n",
"Epoch 21/30\n",
"60/60 [==============================] - 0s 633us/step - loss: 0.9451 - acc: 0.5667 - val_loss: 0.8540 - val_acc: 0.7500\n",
"Epoch 22/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 0.7960 - acc: 0.6500 - val_loss: 0.8393 - val_acc: 0.7500\n",
"Epoch 23/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 0.8670 - acc: 0.5833 - val_loss: 0.8223 - val_acc: 0.7500\n",
"Epoch 24/30\n",
"60/60 [==============================] - 0s 600us/step - loss: 0.9493 - acc: 0.6167 - val_loss: 0.8102 - val_acc: 0.7500\n",
"Epoch 25/30\n",
"60/60 [==============================] - 0s 566us/step - loss: 0.9749 - acc: 0.5500 - val_loss: 0.7922 - val_acc: 0.7500\n",
"Epoch 26/30\n",
"60/60 [==============================] - 0s 583us/step - loss: 0.9339 - acc: 0.6333 - val_loss: 0.7809 - val_acc: 0.8000\n",
"Epoch 27/30\n",
"60/60 [==============================] - 0s 550us/step - loss: 0.7419 - acc: 0.7000 - val_loss: 0.7721 - val_acc: 0.8000\n",
"Epoch 28/30\n",
"60/60 [==============================] - 0s 583us/step - loss: 0.8690 - acc: 0.6167 - val_loss: 0.7634 - val_acc: 0.8000\n",
"Epoch 29/30\n",
"60/60 [==============================] - 0s 583us/step - loss: 0.8348 - acc: 0.6167 - val_loss: 0.7556 - val_acc: 0.8000\n",
"Epoch 30/30\n",
"60/60 [==============================] - 0s 533us/step - loss: 0.7058 - acc: 0.7000 - val_loss: 0.7460 - val_acc: 0.8000\n"
]
}
],
"source": [
"#建立優化防止梯度下降訓練\n",
"from keras import models\n",
"from keras import layers\n",
"from keras import optimizers\n",
"\n",
"model = models.Sequential()\n",
"model.add(layers.Dense(256, activation='relu', input_dim=3 * 3 * 512))\n",
"model.add(layers.Dropout(0.5))\n",
"model.add(layers.Dense(3, activation='softmax'))\n",
"\n",
"model.compile(optimizer=optimizers.RMSprop(lr=2e-5),\n",
" loss='categorical_crossentropy',\n",
" metrics=['acc'])\n",
"\n",
"history = model.fit(train_features, train_labels,\n",
" epochs=30,\n",
" batch_size=100,\n",
" validation_data=(validation_features, validation_labels))"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"model.save('train3.h5')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtAAAAEjCAYAAAAbuTa2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd3iUVfbA8e9JIwQSIA2EAEFqACkhUgTpsiIqIqyCYEGxrW2Lrui6rrr6s3dcFRVsCBYUcRVRuopSQhNIqAYJLSEBAoEASc7vj3eSDZAygZlMEs7neeYh88597z0zCTNn7nuLqCrGGGOMMcYY9/j5OgBjjDHGGGOqEkugjTHGGGOMKQdLoI0xxhhjjCkHS6CNMcYYY4wpB0ugjTHGGGOMKQdLoI0xxhhjjCkHS6CNMWctEZklItf7Og5fEMdkEdknIkt9HY8xxlQllkAbYyo9EUkRkSMicsiV8H0tIo3PtF5VHayq751GPCIid4vIWhHJFpFUEflURM5zPf6uiKiIdC1yTgsR0SL3F4hITtHnISIDRSSllHbV1d4hEdkhIi+IiH9543fpBVwExKhq17IKG2OM+R9LoI0xVcVlqlobOAfYA7zqw1heBu4B7gbCgVbADGBIkTKZwONl1JMN/LOcbXd0vQ4DgGuAm8t5PiISADQFUlQ1+zTPN8aYs5Yl0MaYKkVVc4DPgLYFx0RkiIisFJEsEdkuIo8UeSxYRD4UkQwR2S8iy0SkvuuxBSIyrkjZm0UkSUQOish6EYk/uX0RaQncAYxS1XmqelRVD6vqFFV9qkjR94AOItKnlKfzCjBKRFqcxuuQDPwAtHfF1VBEpotIuoj8JiJ3F4n5ERH5zPU6ZAE3AW8DPVy92Y8Wef6bRSRTRGaKSMMidaiI3CEim4BNRY79SUQ2uV6zf4tIcxH52fW7+EREglxl64nIf13x7XP9HFOk/gWu839y1fWdiEQWebyXiCx2/Q63i8gNruM1ROQ5EfldRPaIyBsiUrO8r6cxxpSHJdDGmCpFREKAq4FfihzOBq4D6uL0At8uIle4HrseqAM0BiKA24AjxdT7R+ARVz1hwOVARjEhDABSVbWsccOHgf8DniilzA7gLVe75SIibYELgZUi4gd8BawGGrli/LOI/KHIKUNxvnjUBd7HeR1+VtXaqvovEekPPAlchdPLvw2YdlKzVwDdKPLlBbgY6AJ0B/4OTARG47ze7YFRrnJ+wGScnu8mOL+DCSfVfw0wFogGgoB7Xc+1CTAL56pDFNAJWOU652mcKwCdgBau5/9waa+dMcacKUugjTFVxQwR2Q9k4YzdfbbgAVVdoKq/qmq+qq4BpgIFPb/HcRLnFqqap6qJqppVTP3jgGdUdZk6NqvqtmLKRQC73Iz5TaCJiAwupcyTwGUi0s7NOleIyD6chPltnKT0fCBKVR9T1WOquhUnMR9Z5LyfVXWG6zU65QsETtI7SVVXqOpR4AGcHurYorGqauZJ5z+tqlmqug5YC3ynqltV9QBO0tsZQFUzVHW6q7f+IM4Xi5N75yer6kZX/Z/gJMUFsc1R1amqetxV1yoREZwhLH9xxXUQ50vLSIwxxotsHJsxpqq4QlXnuCbNDQUWikhbVd0tIt2Ap3B6PIOAGsCnrvM+wOkNnSYidYEPgX+o6vGT6m8MbHEjjgycHtoyqepREfk38G/+1xN7cpl0EZkAPAa87ka18aq6uegBEWkKNHR9wSjgjzPEo8D2MuptCKwoEtchEcnA6dFNKaWOPUV+PlLM/QauGEOAF3F6rOu5Hg8VEX9VzXPd313k3MNAbdfPJf1uooAQINHJpQEQnOdujDFeYz3QxpgqxdWL/DmQh7OSBMBHwEygsarWAd7ASaRw9Vg+qqptgQuAS3GGaZxsO9DcjRDmAjEikuBmyJNxhpAMK6XMs0A/nKEQp2M78Juq1i1yC1XVS4qU0ZJOdtmJM7wCABGphdPbvqMcdZTmb0BroJuqhgG9C5py49ySfjd7cZL0dkWedx3XJEtjjPEaS6CNMVWKOIbi9GImuQ6HApmqmuNaOu6aIuX7ich5rp7rLJwhHXkn14szHOJeEeniaqOFq2f3BKq6CfgPMFVE+opIkGui4kgRGV9M+VycMc73l/ScVHU/8DzOGOLTsRTIEpH7RaSmiPiLSHsROb8cdXwEjBWRTiJSA2coxBJVTTnNmE4WipPs7heRcOBf5Th3CjBQRK4SkQARiRCRTqqajzNU5UURiQYQkUYnjf02xhiPswTaGFNVfCUih3CS4CeA613jbgH+BDwmIgdxJpB9UuS8BjiT57JwEu6FOMM4TqCqn7rq/Qg4iLMsXXgJsdyNMwHuNWA/zvCCYTjjkoszlbLHTb9M8Yl9mVxDIC7DGTP8G07P7Ns4Pd/u1jEXZ0m96a5Ym+PZscQvATVdsf0CfFuO2H4HLsHpxc7EmUDY0fXw/cBm4BfXCiNzcHq6jTHGa0T1TK7IGWOMMcYYc3axHmhjjDHGGGPKwRJoY4wxxhhjysESaGOMMcYYY8rBEmhjjDHGGGPKwRJoY4wxxhhjysESaGOMMcYYY8rBEmhjjDHGGGPKwRJoY4wxxhhjysESaGOMMcYYY8rBEmhjjDHGGGPKwRJoY4wxxhhjysESaGOMMcYYY8rBEmhT6YjIAhHZJyI1fB2LMcaYykFEUkRkoK/jMAYsgTaVjIjEAhcCClxege0GVFRbxhhjjKnaLIE2lc11wC/Au8D1BQdFpKaIPC8i20TkgIj8KCI1XY/1EpHFIrJfRLaLyA2u4wtEZFyROm4QkR+L3FcRuUNENgGbXMdedtWRJSKJInJhkfL+IvKgiGwRkYOuxxuLyGsi8nzRJyEiX4nIn73xAhljjPkfEblZRDaLSKaIzBSRhq7jIiIvikia63NjjYi0dz12iYisd72X7xCRe337LExVYwm0qWyuA6a4bn8Qkfqu488BXYALgHDg70C+iDQBZgGvAlFAJ2BVOdq7AugGtHXdX+aqIxz4CPhURIJdj/0VGAVcAoQBNwKHgfeAUSLiByAikcAAYGp5nrgxxpjyEZH+wJPAVcA5wDZgmuvhQUBvoBVQF7gayHA99g5wq6qGAu2BeRUYtqkGLIE2lYaI9AKaAp+oaiKwBbjGlZjeCNyjqjtUNU9VF6vqUWA0MEdVp6rqcVXNUNXyJNBPqmqmqh4BUNUPXXXkqurzQA2gtavsOOAhVd2gjtWuskuBAzhJM8BIYIGq7jnDl8QYY0zpRgOTVHWF6zPhAaCHazjgcSAUaAOIqiap6i7XeceBtiISpqr7VHWFD2I3VZgl0KYyuR74TlX3uu5/5DoWCQTjJNQna1zCcXdtL3pHRP4mIkmuy337gTqu9stq6z1gjOvnMcAHZxCTMcYY9zTE6XUGQFUP4fQyN1LVecAE4DVgj4hMFJEwV9HhOFcTt4nIQhHpUcFxmyrOEmhTKbjGM18F9BGR3SKyG/gL0BHnslwO0LyYU7eXcBwgGwgpcr9BMWW0SAwXAve74qinqnVxepbFjbY+BIaKSEcgDphRQjljjDGesxPnyiUAIlILiAB2AKjqK6raBWiHM5TjPtfxZao6FIjGeb/+pILjNlWcJdCmsrgCyMMZi9zJdYsDfsAZFz0JeEFEGrom8/VwLXM3BRgoIleJSICIRIhIJ1edq4ArRSRERFoAN5URQyiQC6QDASLyMM5Y5wJvA/8WkZauySkdRCQCQFVTccZPfwBMLxgSYowxxqMCRSS44IaT+I4VkU6uz4T/A5aoaoqInC8i3UQkEKdDJQfIE5EgERktInVU9TiQhfP5Y4zbLIE2lcX1wGRV/V1VdxfccC6/jQbGA7/iJKmZwNOAn6r+jnMZ7m+u46tweq0BXgSOAXtwhlhMKSOG2TgTEjfiXBLM4cQhHi/gvFl/h/OG+w5Qs8jj7wHnYcM3jDHGW74BjhS5XQj8E5gO7MK5SjjSVTYMeAvYh/OenoEzIR3gWiBFRLKA2/jfEDxj3CKqWnYpY0yZRKQ3zlCOWFXN93U8xhhjjPEO64E2xgNclwjvAd625NkYY4yp3iyBNuYMiUgcsB9nsuNLPg7HGGOMMV5mQziMMcYYY4wpB+uBNsYYY4wxphwCfB1AeUVGRmpsbKyvwzDGnOUSExP3qmqUr+Ooruy93hhTGZT0Xl/lEujY2FiWL1/u6zCMMWc5EdlWdilzuuy93hhTGZT0Xm9DOIwxxhhjjCkHS6CNMcYYY4wpB0ugjTHGGGOMKYcqNwa6OMePHyc1NZWcnBxfh2IqkeDgYGJiYggMDPR1KMYYY84Clo9UXeXNGbyaQIvIxcDLgD/ODm1PnfR4E+A9oK6rzHhV/aa87aSmphIaGkpsbCwi4oHITVWnqmRkZJCamkqzZs18HY4xxpizgOUjVdPp5AxeG8IhIv7Aa8BgoC0wSkTanlTsIeATVe0MjAT+czpt5eTkEBERYX+sppCIEBERYb0AxhhjKozlI1XT6eQM3uyB7gpsVtWtACIyDRgKrC9SRoEw1891gJ2n25j9sZqT2d9EJaQK25dCbiX7YlOzHpzTwddRmNOUn6+s2XGAOjUDaRZZy9fhmLOcffZUTeX9vXkzgW4EbC9yPxXodlKZR4DvROQuoBYwsLiKROQW4BaAJk2aeDxQY0wFWT0VZtzu6yhO1bw/XPuFr6MwpyknN4+r3vyZ0d2a8K/L2vk6HGPMWcCbCXRxqbyedH8U8K6qPi8iPYAPRKS9quafcJLqRGAiQEJCwsl1+FxGRgYDBgwAYPfu3fj7+xMV5Wxas3TpUoKCgsqsY+zYsYwfP57WrVuXq+0hQ4aQlZXFDz/8UP7AjalIebmw8BlocB5c/LSvozlRzbq+jsCcgZCgAHo2j2BuUhoPX9rWegDNWcsX+cjbb7/N2rVreemll04/8CrImwl0KtC4yP0YTh2icRNwMYCq/iwiwUAkkObFuDwuIiKCVatWAfDII49Qu3Zt7r333hPKqCqqip9f8cPOJ0+eXO52MzIy+PXXXwkODub333/3Wu98bm4uAQHVYsEW40u/fgL7foORH0FsT19HYzxARBoD7wMNgHxgoqq+fFIZwZlMfglwGLhBVVd4Opb+cfWZv2EtW9IP0SI61NPVG1Ml+CofORt5cx3oZUBLEWkmIkE4kwRnnlTmd2AAgIjEAcFAuhdjqlCbN2+mffv23HbbbcTHx7Nr1y5uueUWEhISaNeuHY899lhh2V69erFq1Spyc3OpW7cu48ePp2PHjvTo0YO0tOK/T3z22WdcccUVXH311Xz88ceFx3fv3s3QoUPp0KEDHTt2ZMmSJYDzn6Lg2NixYwEYM2YMM2bMKDy3du3aAMyZM4eBAwcycuRIOnfuDMBll11Gly5daNeuHW+//XbhOV9//TXx8fF07NiRQYMGkZeXR4sWLcjMzAQgLy+Pc889t/C+OQvl5cKiZ53e59aX+Doa4zm5wN9UNQ7oDtxRzGTxwUBL1+0W4HVvBDKgTTQAc5OqVP+LMRXC2/lIcT788EPOO+882rdvz4MPPgg4HXLXXntt4fFXXnkFgBdffJG2bdvSsWNHxowZ49kn7yVe61ZU1VwRuROYjbNE3SRVXScijwHLVXUm8DfgLRH5C87wjhtU9YyGaDz61TrW78w60/BP0LZh2GmPq1u/fj2TJ0/mjTfeAOCpp54iPDyc3Nxc+vXrx4gRI2jb9sTPmwMHDtCnTx+eeuop/vrXvzJp0iTGjx9/St1Tp07lySefpE6dOowZM4b77rsPgDvuuIOLLrqIO++8k9zcXA4fPszq1at5+umnWbx4MeHh4W4ls7/88gvr168v7Nl+7733CA8P5/DhwyQkJDB8+HCOHj3K7bffzg8//EDTpk3JzMzE39+fUaNG8dFHH3HnnXcye/Zszj//fMLDw0/rNTTVwK+fQuZWuHoK2OX1akNVdwG7XD8fFJEknPkvRSeLDwXed723/yIidUXkHNe5HtOwbk3izgljblIat/Zp7smqjTktZ1M+crLU1FQeeughli9fTp06dRg4cCD//e9/iYqKYu/evfz6668A7N+/H4BnnnmGbdu2ERQUVHissvPqToSq+o2qtlLV5qr6hOvYw67kGVVdr6o9VbWjqnZS1e+8GY8vNG/enPPPP7/w/tSpU4mPjyc+Pp6kpCTWr19/yjk1a9Zk8ODBAHTp0oWUlJRTyuzYsYPff/+d7t2707ZtW/Ly8khOTgZgwYIF3HrrrQAEBAQQFhbGvHnzuPrqqwuTWHeS2R49epwwLOTFF18s/BaamprKli1b+Pnnn+nXrx9NmzY9od6bbrqJ9957D4BJkyYV9nibs1BB73P986DNEF9HY7xERGKBzsCSkx4qbkJ5oxLquEVElovI8vT08l+MHBgXzfJtmew/fKzc5xpT3XkrHynOkiVL6N+/P5GRkQQGBnLNNdewaNEiWrRowYYNG7jnnnuYPXs2derUAaBdu3aMGTOGKVOmVJnNz6rdwNbKNgO7Vq3/Lam0adMmXn75ZZYuXUrdunUZM2ZMsWsOFh3k7+/vT25u7illPv74YzIyMgoX/D5w4ADTpk3jkUceAU5djkVVi51YExAQQH6+M2czLy/vhLaKxj5nzhwWLVrEL7/8Qs2aNenVqxc5OTkl1hsbG0u9evWYP38+K1euZNCgQcW+PuYssHY6ZG6Bqz6w3udqSkRqA9OBP6vqyV1u7kwodw6e4YTx/m2ieXXeZhZsSOeKzsXm6MZUmLMlHylOSYMJIiIiWLNmDbNmzeKVV15h+vTpTJw4kdmzZ7Nw4UK+/PJLHn/8cdauXYu/v385n2HF8moPtDlRVlYWoaGhhIWFsWvXLmbPnn3adU2dOpU5c+aQkpJCSkoKS5cuZerUqQD069ev8BJNXl4eWVlZDBw4kGnTphUO3Sj4NzY2lsTERAC++OIL8vLyim3vwIEDhIeHU7NmTdatW8eyZcsA6NmzJ/PmzWPbtm0n1AtOL/To0aMZOXJkiZMVTDWXn+f0Pke3gzaX+joa4wUiEoiTPE9R1c+LKeLOhHKP6BhTl8jaQcxNtnHQxpTGk/lIcbp37878+fPJyMggNzeXadOm0adPH9LT01FV/vjHP/Loo4+yYsUK8vLySE1NpX///jz77LOkp6dz+PBhj8bjDdWuB7oyi4+Pp23btrRv355zzz2Xnj1PbyWCLVu2sHv3bhISEgqPtWzZkho1apCYmMiECRO4+eabefPNNwkICODNN9+ka9eu/P3vf6d3794EBATQpUsX3nnnHW699VaGDh3K999/z6BBg6hRo0axbQ4ZMoSJEyfSsWNH2rRpQ7duzpLe9evX5/XXX2fo0KGoKg0bNmTWrFkADBs2jBtvvJEbbrjhtJ6nqQbWfg4Zm+CP74F9iap2XCtsvAMkqeoLJRSbCdzp2kyrG3DA0+OfC/j5Cf1aR/Ptut0cz8sn0N/+5owpjqfykQLvvPMOn332WeH95cuX89hjj9G3b19Ulcsuu4whQ4awYsUKbrrppsKr108//TS5ublcc801HDx4kPz8fO6//35CQyv/SjpyhnP2KlxCQoIuX778hGNJSUnExcX5KCJTkl9++YUHHniA+fPn+ywG+9vwofw8eK0b+AfCbT9VuwRaRBJVNaHsktWXiPQCfgB+xVnGDuBBoAmAqr7hSrIn4CxZehgYq6rLi6nuBMW917vj27W7ue3DRKbe3J0ezSPKfb4xZ8I+c6q24n5/Jb3XWw+08YonnniCiRMnMm3aNF+HYnxl3Reu3ud3q13ybByq+iPFj3EuWkaBOyomIriwZSRB/n7MTdpjCbQxxmvsU814xT/+8Q+2bdtGjx49fB2K8YX8PGfXwag4iBvq62jMWaRWjQC6N49gno2DNsZ4kSXQxhjPWz8D9m6APvdZ77OpcAPaRLN1bzZb0w/5OhRjTDVln2zGGM/Kz3f1PreBtlf4OhpzFurv2pXQeqGNMd5iCbQxxrPWz4D0ZOh9H/hV7nU8TfXUODyE1vVDmZO0x9ehGGOqKUugjTGeU9D7HNkK2g3zdTTmLDYgLpplKfs4cOS4r0MxxlRDlkB7QN++fU9ZhPyll17iT3/6U6nn1a5dG4CdO3cyYsSIEusuaymnl1566YRFxy+55BKP7iXfsWNHRo0a5bH6TDWWNBPSk6D336332fjUgLho8vKVhRvLvyW4MVVVdc1HHnnkEZ577rkzrseTLIH2gFGjRp2yXNu0adPcTjobNmx4wgLk5XXyH+w333xD3bp1T7u+opKSksjPz2fRokVkZ2d7pM7iuLs9qKnECnqfI1pC+yt9HY05y3VqXI/wWkHMs2Ec5ixSnfORysbWgfaAESNG8NBDD3H06FFq1KhBSkoKO3fupFevXhw6dIihQ4eyb98+jh8/zuOPP87QoScu65WSksKll17K2rVrOXLkCGPHjmX9+vXExcVx5MiRwnK33347y5Yt48iRI4wYMYJHH32UV155hZ07d9KvXz8iIyOZP38+sbGxLF++nMjISF544QUmTZoEwLhx4/jzn/9MSkoKgwcPplevXixevJhGjRrx5ZdfUrNmzVOe20cffcS1115LUlISM2fOLPxPuHnzZm677TbS09Px9/fn008/pXnz5jzzzDN88MEH+Pn5MXjwYJ566in69u3Lc889R0JCAnv37iUhIYGUlBTeffddvv76a3JycsjOzmbmzJklvlbvv/8+zz33HCJChw4d+M9//kOHDh3YuHEjgYGBZGVl0aFDBzZt2kRgYKC3ftVn7nAmvDsEjnjuCkGloXlwaA9c+Zb1Phuf8/cT+raOYm5SGrl5+QTYroTmLFCd85HiFFdndnY2V111FampqeTl5fHPf/6Tq6++mvHjxzNz5kwCAgIYNGjQGfdoV78EetZ42P2rZ+tscB4MfqrEhyMiIujatSvffvstQ4cOZdq0aVx99dWICMHBwXzxxReEhYWxd+9eunfvzuWXX46zOdepXn/9dUJCQlizZg1r1qwhPj6+8LEnnniC8PBw8vLyGDBgAGvWrOHuu+/mhRdeYP78+URGRp5QV2JiIpMnT2bJkiWoKt26daNPnz7Uq1ePTZs2MXXqVN566y2uuuoqpk+fzpgxY06J5+OPP+b7779nw4YNTJgwoTCBHj16NOPHj2fYsGHk5OSQn5/PrFmzmDFjBkuWLCEkJITMzMwyX9qff/6ZNWvWEB4eTm5ubrGv1fr163niiSf46aefiIyMJDMzk9DQUPr27cvXX3/NFVdcwbRp0xg+fHjlTp4BdiRC2npocynUrOfraDyvdjS0H+7rKIwBYGBcfT5fsYMVv++na7NwX4djzjaWjxTyRD5yspLq3Lp1Kw0bNuTrr78G4MCBA2RmZvLFF1+QnJyMiHhkWEn1S6B9pOCyScEfbME3IlXlwQcfZNGiRfj5+bFjxw727NlDgwYNiq1n0aJF3H333QB06NCBDh06FD72ySefMHHiRHJzc9m1axfr168/4fGT/fjjjwwbNoxatWoBcOWVV/LDDz9w+eWX06xZMzp16gRAly5dSElJOeX8ZcuWERUVRdOmTYmJieHGG29k3759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\n",
"text/plain": [
"<Figure size 864x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"f, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 4))\n",
"t = f.suptitle('Basic CNN Performance', fontsize=12)\n",
"f.subplots_adjust(top=0.85, wspace=0.3)\n",
"\n",
"epoch_list = list(range(1,31))\n",
"ax1.plot(epoch_list, history.history['acc'], label='Train Accuracy')\n",
"ax1.plot(epoch_list, history.history['val_acc'], label='Validation Accuracy')\n",
"ax1.set_xticks(np.arange(0, 31, 5))\n",
"ax1.set_ylabel('Accuracy Value')\n",
"ax1.set_xlabel('Epoch')\n",
"ax1.set_title('Accuracy')\n",
"l1 = ax1.legend(loc=\"best\")\n",
"\n",
"ax2.plot(epoch_list, history.history['loss'], label='Train Loss')\n",
"ax2.plot(epoch_list, history.history['val_loss'], label='Validation Loss')\n",
"ax2.set_xticks(np.arange(0, 31, 5))\n",
"ax2.set_ylabel('Loss Value')\n",
"ax2.set_xlabel('Epoch')\n",
"ax2.set_title('Loss')\n",
"l2 = ax2.legend(loc=\"best\")\n"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model: \"sequential_3\"\n",
"_________________________________________________________________\n",
"Layer (type) Output Shape Param # \n",
"=================================================================\n",
"dense_5 (Dense) (None, 256) 1179904 \n",
"_________________________________________________________________\n",
"dropout_2 (Dropout) (None, 256) 0 \n",
"_________________________________________________________________\n",
"dense_6 (Dense) (None, 3) 771 \n",
"=================================================================\n",
"Total params: 1,180,675\n",
"Trainable params: 1,180,675\n",
"Non-trainable params: 0\n",
"_________________________________________________________________\n"
]
}
],
"source": [
"import keras as ks\n",
"model = ks.models.load_model('train3.h5')\n",
"model.summary()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [],
"source": [
"#訓練結果提取,建立混淆矩陣\n",
"import pandas as pd\n",
"import tensorflow as tf\n",
"import sklearn\n",
"from sklearn.metrics import confusion_matrix\n",
"predictions = model.predict_classes(test_features)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 0, 0, 1, 0, 2, 1, 2, 2, 1, 0, 2, 0, 0, 0]\n",
"(15,)\n"
]
}
],
"source": [
"from numpy import argmax\n",
"from keras.utils.np_utils import to_categorical\n",
"test_labels_change = [0]*15\n",
"for i in range(12):\n",
" if(np.array_equal(test_labels[i],[0,0,1])):\n",
" test_labels_change[i] = 2\n",
" elif(np.array_equal(test_labels[i],[0,1,0])):\n",
" test_labels_change[i] = 1\n",
" elif(np.array_equal(test_labels[i],[1,0,0])):\n",
" test_labels_change[i] = 0\n",
"\n",
"print(test_labels_change)\n",
"test_labels_change = np.asarray(test_labels_change)\n",
"print(test_labels_change.shape)"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(15,)\n",
"(15,)\n"
]
},
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th>預測值</th>\n",
" <th>0</th>\n",
" <th>1</th>\n",
" <th>2</th>\n",
" </tr>\n",
" <tr>\n",
" <th>實際值</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <td>0</td>\n",
" <td>5</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <td>2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>4</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
"預測值 0 1 2\n",
"實際值 \n",
"0 5 1 1\n",
"1 0 4 0\n",
"2 0 0 4"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(test_labels_change.shape)\n",
"print(predictions.shape)\n",
"pd.crosstab(test_labels_change, predictions, rownames=['實際值'], colnames=['預測值'])"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}