T4 TensorFlow入门实战——猴痘病辨认

[复制链接]
发表于 2025-12-13 15:24:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  • 🍨 本文為🔗365天深度學習訓練營 中的學習紀錄博客
  • 🍖 原作者:K同砚啊 | 接輔導、項目定制
一、前期预备

1. 导入数据

  1. import numpy as np
  2. import PIL,pathlib
  3. from PIL import Image
  4. import matplotlib.pyplot as plt
  5. import numpy as np
  6. import tensorflow as tf
  7. from tensorflow import keras
  8. from tensorflow.keras import layers,models
  9. from tensorflow.keras.callbacks import ModelCheckpoint
  10. # load the data
  11. data_dir = './data/4_data/'
  12. data_dir = pathlib.Path(data_dir)
  13. data_paths = list(data_dir.glob('*'))
  14. classeNames = [str(path).split("\")[2] for path in data_paths]
  15. classeNames
复制代码

2. 查察数据  

  1. image_count = len(list(data_dir.glob('*/*.jpg')))
  2. print("图片总数为:",image_count)
复制代码

  1. Monkeypox = list(data_dir.glob('Monkeypox/*.jpg'))
  2. PIL.Image.open(str(Monkeypox[0]))
复制代码

二、数据预处置惩罚

1. 加载数据

   
  测试集与验证集的关系:

1验证集并没有加入训练过程梯度降落过程的,狭义上来讲是没有加入模子的参数训练更新的。
2但是广义上来讲,验证集存在的意义确实加入了一个“人工调参”的过程,我们根据每一个epoch训练之后模子在valid data上的体现来决定是否必要训练举行early stop,大概根据这个过程模子的性能变革来调解模子的超参数,如学习率,batch_size等等。
3因此,我们也可以以为,验证集也加入了训练,但是并没有使得模子去overfit验证集
  1. # Data loading and preprocessing
  2. batch_size = 32
  3. img_height = 224
  4. img_width = 224
  5. """
  6. 关于image_dataset_from_directory()的详细介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/117018789
  7. """
  8. train_ds = tf.keras.preprocessing.image_dataset_from_directory(
  9.     data_dir,
  10.     validation_split=0.2,
  11.     subset="training",
  12.     seed=123,
  13.     image_size=(img_height, img_width),
  14.     batch_size=batch_size)
复制代码

  1. val_ds = tf.keras.preprocessing.image_dataset_from_directory(
  2.     data_dir,
  3.     validation_split=0.2,
  4.     subset="validation",
  5.     seed=123,
  6.     image_size=(img_height, img_width),
  7.     batch_size=batch_size)
复制代码

  1. class_names = train_ds.class_names
  2. print(class_names)
复制代码

 2. 可视化数据 

  1. # Visualize the data
  2. plt.figure(figsize=(20, 10))
  3. for images, labels in train_ds.take(1): # take()方法用于从数据集中取出一批数据
  4.     for i in range(20):
  5.         ax = plt.subplot(5, 10, i + 1)
  6.         plt.imshow(images[i].numpy().astype("uint8"))
  7.         plt.title(class_names[labels[i]])
  8.         
  9.         plt.axis("off")
复制代码

  1. # Check the shape of the data
  2. for image_batch, labels_batch in train_ds:
  3.     print(image_batch.shape)
  4.     print(labels_batch.shape)
  5.     break
复制代码

  3. 设置数据集

  1. AUTOTUNE = tf.data.AUTOTUNE
  2. train_ds = train_ds.cache().shuffle(1000).prefetch(buffer_size=AUTOTUNE)
  3. val_ds = val_ds.cache().prefetch(buffer_size=AUTOTUNE)
复制代码
三、训练模子 

1. 构建CNN网络模子

   卷积神经网络(CNN)的输入是张量 (Tensor) 情势的 (image_height, image_width, color_channels),包罗了图像高度、宽度及颜色信息。不必要输入batch size。color_channels 为 (R,G,B) 分别对应 RGB 的三个颜色通道(color channel)。在此示例中,我们的 CNN 输入的形状是 (224, 224, 3)即彩色图像。我们必要在声明第一层时将形状赋值给参数input_shape
  

  1. # Define the model architecture
  2. num_classes = 2
  3. """
  4. 关于卷积核的计算不懂的可以参考文章:https://blog.csdn.net/qq_38251616/article/details/114278995
  5. layers.Dropout(0.4) 作用是防止过拟合,提高模型的泛化能力。
  6. 在上一篇文章花朵识别中,训练准确率与验证准确率相差巨大就是由于模型过拟合导致的
  7. 关于Dropout层的更多介绍可以参考文章:https://mtyjkh.blog.csdn.net/article/details/115826689
  8. """
  9. model = models.Sequential([
  10.     layers.experimental.preprocessing.Rescaling(1./255, input_shape=(img_height, img_width, 3)),
  11.    
  12.     layers.Conv2D(16, (3, 3), activation='relu', input_shape=(img_height, img_width, 3)), # 卷积层1,卷积核3*3  
  13.     layers.AveragePooling2D((2, 2)),               # 池化层1,2*2采样
  14.     layers.Conv2D(32, (3, 3), activation='relu'),  # 卷积层2,卷积核3*3
  15.     layers.AveragePooling2D((2, 2)),               # 池化层2,2*2采样
  16.     layers.Dropout(0.3),  
  17.     layers.Conv2D(64, (3, 3), activation='relu'),  # 卷积层3,卷积核3*3
  18.     layers.Dropout(0.3),  
  19.    
  20.     layers.Flatten(),                       # Flatten层,连接卷积层与全连接层
  21.     layers.Dense(128, activation='relu'),   # 全连接层,特征进一步提取
  22.     layers.Dense(num_classes)               # 输出层,输出预期结果
  23. ])
  24. model.summary()  # 打印网络结构
复制代码

2. 编译模子 

  1. """
  2. 这里设置优化器、损失函数以及metrics
  3. """
  4. # model.compile()方法用于在配置训练方法时,告知训练时用的优化器、损失函数和准确率评测标准
  5. opt = tf.keras.optimizers.Adam(learning_rate=1e-4)
  6. model.compile(optimizer=opt,
  7.               loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
  8.               metrics=['accuracy'])
复制代码
  3. 训练模子

  1. epochs = 50
  2. checkpointer = ModelCheckpoint('best_model.h5',
  3.                                 monitor='val_accuracy',
  4.                                 verbose=1,
  5.                                 save_best_only=True,
  6.                                 save_weights_only=True)
  7. history = model.fit(train_ds,
  8.                     validation_data=val_ds,
  9.                     epochs=epochs,
  10.                     callbacks=[checkpointer])
复制代码
  1. Epoch 1/50
  2. 54/54 [==============================] - ETA: 0s - loss: 0.7423 - accuracy: 0.5420
  3. Epoch 1: val_accuracy improved from -inf to 0.54206, saving model to best_model.h5
  4. 54/54 [==============================] - 58s 1s/step - loss: 0.7423 - accuracy: 0.5420 - val_loss: 0.6748 - val_accuracy: 0.5421
  5. Epoch 2/50
  6. 54/54 [==============================] - ETA: 0s - loss: 0.6608 - accuracy: 0.6039
  7. Epoch 2: val_accuracy improved from 0.54206 to 0.55374, saving model to best_model.h5
  8. 54/54 [==============================] - 77s 1s/step - loss: 0.6608 - accuracy: 0.6039 - val_loss: 0.7327 - val_accuracy: 0.5537
  9. Epoch 3/50
  10. 54/54 [==============================] - ETA: 0s - loss: 0.6398 - accuracy: 0.6313
  11. Epoch 3: val_accuracy improved from 0.55374 to 0.58645, saving model to best_model.h5
  12. 54/54 [==============================] - 114s 2s/step - loss: 0.6398 - accuracy: 0.6313 - val_loss: 0.6823 - val_accuracy: 0.5864
  13. Epoch 4/50
  14. 54/54 [==============================] - ETA: 0s - loss: 0.6048 - accuracy: 0.6727
  15. Epoch 4: val_accuracy improved from 0.58645 to 0.62850, saving model to best_model.h5
  16. 54/54 [==============================] - 100s 2s/step - loss: 0.6048 - accuracy: 0.6727 - val_loss: 0.6461 - val_accuracy: 0.6285
  17. Epoch 5/50
  18. 54/54 [==============================] - ETA: 0s - loss: 0.5744 - accuracy: 0.7118
  19. Epoch 5: val_accuracy improved from 0.62850 to 0.68458, saving model to best_model.h5
  20. 54/54 [==============================] - 104s 2s/step - loss: 0.5744 - accuracy: 0.7118 - val_loss: 0.6060 - val_accuracy: 0.6846
  21. Epoch 6/50
  22. 54/54 [==============================] - ETA: 0s - loss: 0.5359 - accuracy: 0.7392
  23. Epoch 6: val_accuracy improved from 0.68458 to 0.74533, saving model to best_model.h5
  24. 54/54 [==============================] - 91s 2s/step - loss: 0.5359 - accuracy: 0.7392 - val_loss: 0.5220 - val_accuracy: 0.7453
  25. Epoch 7/50
  26. 54/54 [==============================] - ETA: 0s - loss: 0.4847 - accuracy: 0.7690
  27. Epoch 7: val_accuracy improved from 0.74533 to 0.78505, saving model to best_model.h5
  28. 54/54 [==============================] - 93s 2s/step - loss: 0.4847 - accuracy: 0.7690 - val_loss: 0.4718 - val_accuracy: 0.7850
  29. Epoch 8/50
  30. 54/54 [==============================] - ETA: 0s - loss: 0.4519 - accuracy: 0.7888
  31. Epoch 8: val_accuracy did not improve from 0.78505
  32. 54/54 [==============================] - 105s 2s/step - loss: 0.4519 - accuracy: 0.7888 - val_loss: 0.4581 - val_accuracy: 0.7804
  33. Epoch 9/50
  34. 54/54 [==============================] - ETA: 0s - loss: 0.4004 - accuracy: 0.8267
  35. Epoch 9: val_accuracy did not improve from 0.78505
  36. 54/54 [==============================] - 80s 1s/step - loss: 0.4004 - accuracy: 0.8267 - val_loss: 0.4439 - val_accuracy: 0.7710
  37. Epoch 10/50
  38. 54/54 [==============================] - ETA: 0s - loss: 0.3667 - accuracy: 0.8431
  39. Epoch 10: val_accuracy improved from 0.78505 to 0.82944, saving model to best_model.h5
  40. 54/54 [==============================] - 96s 2s/step - loss: 0.3667 - accuracy: 0.8431 - val_loss: 0.3989 - val_accuracy: 0.8294
  41. Epoch 11/50
  42. 54/54 [==============================] - ETA: 0s - loss: 0.3331 - accuracy: 0.8623
  43. Epoch 11: val_accuracy did not improve from 0.82944
  44. 54/54 [==============================] - 74s 1s/step - loss: 0.3331 - accuracy: 0.8623 - val_loss: 0.4115 - val_accuracy: 0.8294
  45. Epoch 12/50
  46. 54/54 [==============================] - ETA: 0s - loss: 0.3408 - accuracy: 0.8518
  47. Epoch 12: val_accuracy did not improve from 0.82944
  48. 54/54 [==============================] - 88s 2s/step - loss: 0.3408 - accuracy: 0.8518 - val_loss: 0.5275 - val_accuracy: 0.7547
  49. Epoch 13/50
  50. 54/54 [==============================] - ETA: 0s - loss: 0.3170 - accuracy: 0.8821
  51. Epoch 13: val_accuracy improved from 0.82944 to 0.83411, saving model to best_model.h5
  52. 54/54 [==============================] - 70s 1s/step - loss: 0.3170 - accuracy: 0.8821 - val_loss: 0.3725 - val_accuracy: 0.8341
  53. Epoch 14/50
  54. 54/54 [==============================] - ETA: 0s - loss: 0.2625 - accuracy: 0.9026
  55. Epoch 14: val_accuracy improved from 0.83411 to 0.84813, saving model to best_model.h5
  56. 54/54 [==============================] - 96s 2s/step - loss: 0.2625 - accuracy: 0.9026 - val_loss: 0.3590 - val_accuracy: 0.8481
  57. Epoch 15/50
  58. 54/54 [==============================] - ETA: 0s - loss: 0.2414 - accuracy: 0.9061
  59. Epoch 15: val_accuracy did not improve from 0.84813
  60. 54/54 [==============================] - 81s 2s/step - loss: 0.2414 - accuracy: 0.9061 - val_loss: 0.3652 - val_accuracy: 0.8411
  61. Epoch 16/50
  62. 54/54 [==============================] - ETA: 0s - loss: 0.2450 - accuracy: 0.9008
  63. Epoch 16: val_accuracy did not improve from 0.84813
  64. 54/54 [==============================] - 79s 1s/step - loss: 0.2450 - accuracy: 0.9008 - val_loss: 0.3939 - val_accuracy: 0.8294
  65. Epoch 17/50
  66. 54/54 [==============================] - ETA: 0s - loss: 0.2208 - accuracy: 0.9131
  67. Epoch 17: val_accuracy improved from 0.84813 to 0.86449, saving model to best_model.h5
  68. 54/54 [==============================] - 82s 2s/step - loss: 0.2208 - accuracy: 0.9131 - val_loss: 0.3642 - val_accuracy: 0.8645
  69. Epoch 18/50
  70. 54/54 [==============================] - ETA: 0s - loss: 0.2206 - accuracy: 0.9154
  71. Epoch 18: val_accuracy did not improve from 0.86449
  72. 54/54 [==============================] - 73s 1s/step - loss: 0.2206 - accuracy: 0.9154 - val_loss: 0.3686 - val_accuracy: 0.8458
  73. Epoch 19/50
  74. 54/54 [==============================] - ETA: 0s - loss: 0.1874 - accuracy: 0.9352
  75. Epoch 19: val_accuracy improved from 0.86449 to 0.86916, saving model to best_model.h5
  76. 54/54 [==============================] - 82s 2s/step - loss: 0.1874 - accuracy: 0.9352 - val_loss: 0.3477 - val_accuracy: 0.8692
  77. Epoch 20/50
  78. 54/54 [==============================] - ETA: 0s - loss: 0.1739 - accuracy: 0.9364
  79. Epoch 20: val_accuracy did not improve from 0.86916
  80. 54/54 [==============================] - 66s 1s/step - loss: 0.1739 - accuracy: 0.9364 - val_loss: 0.4012 - val_accuracy: 0.8551
  81. Epoch 21/50
  82. 54/54 [==============================] - ETA: 0s - loss: 0.1810 - accuracy: 0.9306
  83. Epoch 21: val_accuracy did not improve from 0.86916
  84. 54/54 [==============================] - 82s 2s/step - loss: 0.1810 - accuracy: 0.9306 - val_loss: 0.3377 - val_accuracy: 0.8645
  85. Epoch 22/50
  86. 54/54 [==============================] - ETA: 0s - loss: 0.1492 - accuracy: 0.9469
  87. Epoch 22: val_accuracy improved from 0.86916 to 0.87150, saving model to best_model.h5
  88. 54/54 [==============================] - 75s 1s/step - loss: 0.1492 - accuracy: 0.9469 - val_loss: 0.3442 - val_accuracy: 0.8715
  89. Epoch 23/50
  90. 54/54 [==============================] - ETA: 0s - loss: 0.1589 - accuracy: 0.9434
  91. Epoch 23: val_accuracy did not improve from 0.87150
  92. 54/54 [==============================] - 71s 1s/step - loss: 0.1589 - accuracy: 0.9434 - val_loss: 0.3921 - val_accuracy: 0.8668
  93. Epoch 24/50
  94. 54/54 [==============================] - ETA: 0s - loss: 0.1557 - accuracy: 0.9411
  95. Epoch 24: val_accuracy did not improve from 0.87150
  96. 54/54 [==============================] - 84s 2s/step - loss: 0.1557 - accuracy: 0.9411 - val_loss: 0.3594 - val_accuracy: 0.8692
  97. Epoch 25/50
  98. 54/54 [==============================] - ETA: 0s - loss: 0.1297 - accuracy: 0.9603
  99. Epoch 25: val_accuracy improved from 0.87150 to 0.88551, saving model to best_model.h5
  100. 54/54 [==============================] - 67s 1s/step - loss: 0.1297 - accuracy: 0.9603 - val_loss: 0.3609 - val_accuracy: 0.8855
  101. Epoch 26/50
  102. 54/54 [==============================] - ETA: 0s - loss: 0.1236 - accuracy: 0.9551
  103. Epoch 26: val_accuracy did not improve from 0.88551
  104. 54/54 [==============================] - 85s 2s/step - loss: 0.1236 - accuracy: 0.9551 - val_loss: 0.3500 - val_accuracy: 0.8785
  105. Epoch 27/50
  106. 54/54 [==============================] - ETA: 0s - loss: 0.1277 - accuracy: 0.9557
  107. Epoch 27: val_accuracy did not improve from 0.88551
  108. 54/54 [==============================] - 83s 2s/step - loss: 0.1277 - accuracy: 0.9557 - val_loss: 0.3584 - val_accuracy: 0.8808
  109. Epoch 28/50
  110. 54/54 [==============================] - ETA: 0s - loss: 0.1212 - accuracy: 0.9609
  111. Epoch 28: val_accuracy did not improve from 0.88551
  112. 54/54 [==============================] - 70s 1s/step - loss: 0.1212 - accuracy: 0.9609 - val_loss: 0.3570 - val_accuracy: 0.8738
  113. Epoch 29/50
  114. 54/54 [==============================] - ETA: 0s - loss: 0.1011 - accuracy: 0.9662
  115. Epoch 29: val_accuracy did not improve from 0.88551
  116. 54/54 [==============================] - 86s 2s/step - loss: 0.1011 - accuracy: 0.9662 - val_loss: 0.3814 - val_accuracy: 0.8738
  117. Epoch 30/50
  118. 54/54 [==============================] - ETA: 0s - loss: 0.0960 - accuracy: 0.9691
  119. Epoch 30: val_accuracy improved from 0.88551 to 0.88785, saving model to best_model.h5
  120. 54/54 [==============================] - 64s 1s/step - loss: 0.0960 - accuracy: 0.9691 - val_loss: 0.3985 - val_accuracy: 0.8879
  121. Epoch 31/50
  122. 54/54 [==============================] - ETA: 0s - loss: 0.1012 - accuracy: 0.9644
  123. Epoch 31: val_accuracy did not improve from 0.88785
  124. 54/54 [==============================] - 82s 2s/step - loss: 0.1012 - accuracy: 0.9644 - val_loss: 0.4143 - val_accuracy: 0.8668
  125. Epoch 32/50
  126. 54/54 [==============================] - ETA: 0s - loss: 0.0774 - accuracy: 0.9778
  127. Epoch 32: val_accuracy did not improve from 0.88785
  128. 54/54 [==============================] - 66s 1s/step - loss: 0.0774 - accuracy: 0.9778 - val_loss: 0.4387 - val_accuracy: 0.8598
  129. Epoch 33/50
  130. 54/54 [==============================] - ETA: 0s - loss: 0.0829 - accuracy: 0.9720
  131. Epoch 33: val_accuracy did not improve from 0.88785
  132. 54/54 [==============================] - 82s 2s/step - loss: 0.0829 - accuracy: 0.9720 - val_loss: 0.4072 - val_accuracy: 0.8785
  133. Epoch 34/50
  134. 54/54 [==============================] - ETA: 0s - loss: 0.0812 - accuracy: 0.9691
  135. Epoch 34: val_accuracy did not improve from 0.88785
  136. 54/54 [==============================] - 73s 1s/step - loss: 0.0812 - accuracy: 0.9691 - val_loss: 0.4006 - val_accuracy: 0.8832
  137. Epoch 35/50
  138. 54/54 [==============================] - ETA: 0s - loss: 0.0609 - accuracy: 0.9860
  139. Epoch 35: val_accuracy did not improve from 0.88785
  140. 54/54 [==============================] - 81s 1s/step - loss: 0.0609 - accuracy: 0.9860 - val_loss: 0.4124 - val_accuracy: 0.8808
  141. Epoch 36/50
  142. 54/54 [==============================] - ETA: 0s - loss: 0.0614 - accuracy: 0.9831
  143. Epoch 36: val_accuracy did not improve from 0.88785
  144. 54/54 [==============================] - 74s 1s/step - loss: 0.0614 - accuracy: 0.9831 - val_loss: 0.4004 - val_accuracy: 0.8879
  145. Epoch 37/50
  146. 54/54 [==============================] - ETA: 0s - loss: 0.0579 - accuracy: 0.9860
  147. Epoch 37: val_accuracy did not improve from 0.88785
  148. 54/54 [==============================] - 80s 1s/step - loss: 0.0579 - accuracy: 0.9860 - val_loss: 0.4944 - val_accuracy: 0.8738
  149. Epoch 38/50
  150. 54/54 [==============================] - ETA: 0s - loss: 0.0773 - accuracy: 0.9737
  151. Epoch 38: val_accuracy did not improve from 0.88785
  152. 54/54 [==============================] - 67s 1s/step - loss: 0.0773 - accuracy: 0.9737 - val_loss: 0.3970 - val_accuracy: 0.8832
  153. Epoch 39/50
  154. 54/54 [==============================] - ETA: 0s - loss: 0.0589 - accuracy: 0.9831
  155. Epoch 39: val_accuracy did not improve from 0.88785
  156. 54/54 [==============================] - 78s 1s/step - loss: 0.0589 - accuracy: 0.9831 - val_loss: 0.4350 - val_accuracy: 0.8855
  157. Epoch 40/50
  158. 54/54 [==============================] - ETA: 0s - loss: 0.0552 - accuracy: 0.9842
  159. Epoch 40: val_accuracy did not improve from 0.88785
  160. 54/54 [==============================] - 87s 2s/step - loss: 0.0552 - accuracy: 0.9842 - val_loss: 0.4309 - val_accuracy: 0.8855
  161. Epoch 41/50
  162. 54/54 [==============================] - ETA: 0s - loss: 0.0466 - accuracy: 0.9860
  163. Epoch 41: val_accuracy did not improve from 0.88785
  164. 54/54 [==============================] - 76s 1s/step - loss: 0.0466 - accuracy: 0.9860 - val_loss: 0.4608 - val_accuracy: 0.8762
  165. Epoch 42/50
  166. 54/54 [==============================] - ETA: 0s - loss: 0.0700 - accuracy: 0.9732
  167. Epoch 42: val_accuracy improved from 0.88785 to 0.89019, saving model to best_model.h5
  168. 54/54 [==============================] - 76s 1s/step - loss: 0.0700 - accuracy: 0.9732 - val_loss: 0.4174 - val_accuracy: 0.8902
  169. Epoch 43/50
  170. 54/54 [==============================] - ETA: 0s - loss: 0.0418 - accuracy: 0.9889
  171. Epoch 43: val_accuracy did not improve from 0.89019
  172. 54/54 [==============================] - 70s 1s/step - loss: 0.0418 - accuracy: 0.9889 - val_loss: 0.4557 - val_accuracy: 0.8808
  173. Epoch 44/50
  174. 54/54 [==============================] - ETA: 0s - loss: 0.0358 - accuracy: 0.9918
  175. Epoch 44: val_accuracy improved from 0.89019 to 0.89252, saving model to best_model.h5
  176. 54/54 [==============================] - 86s 2s/step - loss: 0.0358 - accuracy: 0.9918 - val_loss: 0.4231 - val_accuracy: 0.8925
  177. Epoch 45/50
  178. 54/54 [==============================] - ETA: 0s - loss: 0.0448 - accuracy: 0.9854
  179. Epoch 45: val_accuracy did not improve from 0.89252
  180. 54/54 [==============================] - 73s 1s/step - loss: 0.0448 - accuracy: 0.9854 - val_loss: 0.4533 - val_accuracy: 0.8832
  181. Epoch 46/50
  182. 54/54 [==============================] - ETA: 0s - loss: 0.0373 - accuracy: 0.9907
  183. Epoch 46: val_accuracy improved from 0.89252 to 0.89720, saving model to best_model.h5
  184. 54/54 [==============================] - 83s 2s/step - loss: 0.0373 - accuracy: 0.9907 - val_loss: 0.4303 - val_accuracy: 0.8972
  185. Epoch 47/50
  186. 54/54 [==============================] - ETA: 0s - loss: 0.0318 - accuracy: 0.9930
  187. Epoch 47: val_accuracy did not improve from 0.89720
  188. 54/54 [==============================] - 76s 1s/step - loss: 0.0318 - accuracy: 0.9930 - val_loss: 0.4530 - val_accuracy: 0.8879
  189. Epoch 48/50
  190. 54/54 [==============================] - ETA: 0s - loss: 0.0355 - accuracy: 0.9918
  191. Epoch 48: val_accuracy did not improve from 0.89720
  192. 54/54 [==============================] - 77s 1s/step - loss: 0.0355 - accuracy: 0.9918 - val_loss: 0.4625 - val_accuracy: 0.8785
  193. Epoch 49/50
  194. 54/54 [==============================] - ETA: 0s - loss: 0.0320 - accuracy: 0.9907
  195. Epoch 49: val_accuracy did not improve from 0.89720
  196. 54/54 [==============================] - 81s 1s/step - loss: 0.0320 - accuracy: 0.9907 - val_loss: 0.4843 - val_accuracy: 0.8902
  197. Epoch 50/50
  198. 54/54 [==============================] - ETA: 0s - loss: 0.0347 - accuracy: 0.9895
  199. Epoch 50: val_accuracy did not improve from 0.89720
  200. 54/54 [==============================] - 76s 1s/step - loss: 0.0347 - accuracy: 0.9895 - val_loss: 0.4925 - val_accuracy: 0.8925
复制代码
 四、模子评估

1. Loss与Accuracy图

  1. acc = history.history['accuracy']
  2. val_acc = history.history['val_accuracy']
  3. loss = history.history['loss']
  4. val_loss = history.history['val_loss']
  5. epochs_range = range(epochs)
  6. plt.figure(figsize=(12, 4))
  7. plt.subplot(1, 2, 1)
  8. plt.plot(epochs_range, acc, label='Training Accuracy')
  9. plt.plot(epochs_range, val_acc, label='Validation Accuracy')
  10. plt.legend(loc='lower right')
  11. plt.title('Training and Validation Accuracy')
  12. plt.subplot(1, 2, 2)
  13. plt.plot(epochs_range, loss, label='Training Loss')
  14. plt.plot(epochs_range, val_loss, label='Validation Loss')
  15. plt.legend(loc='upper right')
  16. plt.title('Training and Validation Loss')
  17. plt.show()
复制代码

2. 指定图片举行推测

  1. # 加载效果最好的模型权重
  2. model.load_weights('best_model.h5')
  3. img = Image.open("./data/4_data/Others/NM15_02_11.jpg")  #这里选择你需要预测的图片
  4. image = tf.image.resize(img, [img_height, img_width])
  5. img_array = tf.expand_dims(image, 0)
  6. predictions = model.predict(img_array) # 这里选用你已经训练好的模型
  7. print("预测结果为:",class_names[np.argmax(predictions)])
复制代码



回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表