目录
利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)
相关文章
DL之AlexNet(Keras框架):利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)
DL之AlexNet(Keras框架):利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)实现
利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型→加载模型)
设计思路
处理过程及结果呈现
Found 17500 images belonging to 2 classes.
Found 7500 images belonging to 2 classes.
1. _________________________________________________________________ 2. Layer (type) Output Shape Param # 3. ================================================================= 4. input_1 (InputLayer) (None, 150, 150, 3) 0 5. _________________________________________________________________ 6. conv2d_1 (Conv2D) (None, 148, 148, 64) 1792 7. _________________________________________________________________ 8. batch_normalization_1 (Batch (None, 148, 148, 64) 256 9. _________________________________________________________________ 10. activation_1 (Activation) (None, 148, 148, 64) 0 11. _________________________________________________________________ 12. max_pooling2d_1 (MaxPooling2 (None, 74, 74, 64) 0 13. _________________________________________________________________ 14. conv2d_2 (Conv2D) (None, 72, 72, 64) 36928 15. _________________________________________________________________ 16. batch_normalization_2 (Batch (None, 72, 72, 64) 256 17. _________________________________________________________________ 18. activation_2 (Activation) (None, 72, 72, 64) 0 19. _________________________________________________________________ 20. max_pooling2d_2 (MaxPooling2 (None, 36, 36, 64) 0 21. _________________________________________________________________ 22. conv2d_3 (Conv2D) (None, 34, 34, 128) 73856 23. _________________________________________________________________ 24. batch_normalization_3 (Batch (None, 34, 34, 128) 512 25. _________________________________________________________________ 26. activation_3 (Activation) (None, 34, 34, 128) 0 27. _________________________________________________________________ 28. max_pooling2d_3 (MaxPooling2 (None, 17, 17, 128) 0 29. _________________________________________________________________ 30. conv2d_4 (Conv2D) (None, 15, 15, 128) 147584 31. _________________________________________________________________ 32. batch_normalization_4 (Batch (None, 15, 15, 128) 512 33. _________________________________________________________________ 34. activation_4 (Activation) (None, 15, 15, 128) 0 35. _________________________________________________________________ 36. max_pooling2d_4 (MaxPooling2 (None, 7, 7, 128) 0 37. _________________________________________________________________ 38. flatten_1 (Flatten) (None, 6272) 0 39. _________________________________________________________________ 40. dense_1 (Dense) (None, 64) 401472 41. _________________________________________________________________ 42. batch_normalization_5 (Batch (None, 64) 256 43. _________________________________________________________________ 44. activation_5 (Activation) (None, 64) 0 45. _________________________________________________________________ 46. dropout_1 (Dropout) (None, 64) 0 47. _________________________________________________________________ 48. dense_2 (Dense) (None, 1) 65 49. _________________________________________________________________ 50. activation_6 (Activation) (None, 1) 0 51. ================================================================= 52. Total params: 663,489 53. Trainable params: 662,593 54. Non-trainable params: 896 55. _________________________________________________________________ 56. None 57. Epoch 1/10 58. - 837s - loss: 0.8109 - binary_accuracy: 0.5731 - val_loss: 0.7552 - val_binary_accuracy: 0.6275 59. Epoch 2/10 60. - 972s - loss: 0.6892 - binary_accuracy: 0.6184 - val_loss: 0.6323 - val_binary_accuracy: 0.6538 61. Epoch 3/10 62. - 888s - loss: 0.6773 - binary_accuracy: 0.6275 - val_loss: 0.6702 - val_binary_accuracy: 0.6475 63. Epoch 4/10 64. - 827s - loss: 0.6503 - binary_accuracy: 0.6522 - val_loss: 1.4757 - val_binary_accuracy: 0.5437 65. Epoch 5/10 66. - 775s - loss: 0.6024 - binary_accuracy: 0.6749 - val_loss: 0.5872 - val_binary_accuracy: 0.6975 67. Epoch 6/10 68. - 775s - loss: 0.5855 - binary_accuracy: 0.6935 - val_loss: 1.6343 - val_binary_accuracy: 0.5075 69. Epoch 7/10 70. - 781s - loss: 0.5725 - binary_accuracy: 0.7117 - val_loss: 1.0417 - val_binary_accuracy: 0.5850 71. Epoch 8/10 72. - 770s - loss: 0.5594 - binary_accuracy: 0.7268 - val_loss: 0.6793 - val_binary_accuracy: 0.6150 73. Epoch 9/10 74. - 774s - loss: 0.5619 - binary_accuracy: 0.7239 - val_loss: 0.7271 - val_binary_accuracy: 0.5737 75. Epoch 10/10 76. - 772s - loss: 0.5206 - binary_accuracy: 0.7485 - val_loss: 1.2269 - val_binary_accuracy: 0.5564 77. train_history.history {'val_loss': [0.7552271389961243, 0.6323019933700561, 0.6702361726760864, 1.4756725096702576, 0.5872411811351776, 1.6343200182914734, 1.0417238283157348, 0.679338448047638, 0.7270535206794739, 1.2268943945566813], 'val_binary_accuracy': [0.6275, 0.65375, 0.6475, 0.54375, 0.6975, 0.5075, 0.585, 0.615, 0.57375, 0.5564102564102564], 'loss': [0.8109277236846185, 0.6891729639422509, 0.6772915293132106, 0.6502932430275025, 0.6023876513204267, 0.5855168705025027, 0.5725259766463311, 0.5594036031153894, 0.561434359863551, 0.5205760602989504], 'binary_accuracy': [0.5730846774193549, 0.6184475806451613, 0.6275201612903226, 0.6522177419354839, 0.6748991935483871, 0.6935483870967742, 0.7116935483870968, 0.7268145161290323, 0.7242424240015974, 0.7484879032258065]} 78.
基于ImageDataGenerator实现数据增强
扩充数据集大小,增强模型的泛化能力。比如进行旋转、变形、归一化等。
- 扩充数据量:对图像作简单的预处理(如缩放,改变像素值范围);
随机打乱图像顺序,并且在图像集上无限循环(不会出现数据用完的情况);
对图像加入扰动,大大增大数据量,避免多次输入相同的训练图像产生过拟合。 - 优化训练效率:训练神经网络时经常需要将数据分成小的批次(例如每16张图像作为一个batch提供给神经网络),在ImageDataGenerator中,只需要简单提供一个参数 batch_size = 16。
类AlexNet代码
1. n_channels = 3 2. input_shape = (*image_size, n_channels) 3. input_layer = Input(input_shape) 4. z = input_layer 5. z = Conv2D(64, (3, 3))(z) 6. z = BatchNormalization()(z) 7. z = Activation('relu')(z) 8. z = MaxPooling2D(pool_size=(2, 2))(z) 9. 10. z = Conv2D(64, (3, 3))(z) 11. z = BatchNormalization()(z) 12. z = Activation('relu')(z) 13. z = MaxPooling2D(pool_size=(2, 2))(z) 14. 15. z = Conv2D(128, (3, 3))(z) 16. z = BatchNormalization()(z) 17. z = Activation('relu')(z) 18. z = MaxPooling2D(pool_size=(2, 2))(z) 19. 20. z = Conv2D(128, (3, 3))(z) 21. z = BatchNormalization()(z) 22. z = Activation('relu')(z) 23. z = MaxPooling2D(pool_size=(2, 2))(z) 24. 25. z = Flatten()(z) # 将特征变成一维向量 26. z = Dense(64)(z) 27. z = BatchNormalization()(z) 28. z = Activation('relu')(z) 29. z = Dropout(0.5)(z) 30. z = Dense(1)(z) 31. z = Activation('sigmoid')(z)