- 🍨 本文为🔗365天深度学习训练营 内部限免文章(版权归 K同学啊 所有)
- ** 参考文章地址:[🔗TensorFlow入门实战|365天深度学习训练营-第9周:猫狗识别(训练营内部成员可读) ]**
- 🍖 作者:K同学啊
一、本周学习内容:
1、找到第八周的问题
第8周的问题处在训练集和测试集数据的历史损失和准确率,因为是每一个batch输出一次history而不是epoch输出一次,因此我们在最终输出时对一个epoch中的batch取平均值
2、数据增强
from tensorflow.keras.preprocessing.image import ImageDataGenerator
ImageDataGenerator(
rescale=所有数据集将乘以该数值,
rotation_range=随即旋转角度数范围,
width_shift_range=随即宽度偏移量,
height_shift_range=随即高度偏移量,
horizontal_flip=是否随机水平翻转,
zoom_range=随机缩放的范围 -> [1-n,1+n]
)
参考这个大佬的链接
3、了解tqdm,并使用tqdm实现可视化进度条
tqdm是 Python 进度条库,可以在 Python长循环中添加一个进度提示信息。用户只需要封装任意的迭代器,是一个快速、扩展性强的进度条工具库。
这篇文章介绍tqdm的使用
二、前言
我们的数据图片共有3400张,两个类别,类别即为文件夹名。
类别包括:[‘cat’, ‘dog’]
三、电脑环境
电脑系统:Windows 10
语言环境:Python 3.8.8
编译器:Pycharm 2021.1.3
深度学习环境:TensorFlow 2.8.0,keras 2.8.0
显卡及显存:RTX 3070 8G
四、前期准备
1、导入相关依赖项
from keras.models import Sequential
from keras.layers import *
from tensorflow import keras
from keras.callbacks import ModelCheckpoint
import tensorflow as tf
import matplotlib.pyplot as plt
2、设置GPU(我下载的tensorflow-gpu 默认使用GPU)
只使用GPU
if gpus:
gpu0 = gpus[0] #如果有多个GPU,仅使用第0个GPU
tf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用
tf.config.set_visible_devices([gpu0],"GPU")
使用cpu和gpu
os.environ[“CUDA_VISIBLE_DEVICES”] = “-1”
3、加载数据集和展示
(1)、数据预处理
# 创建数据增强器
train_datagen=ImageDataGenerator(
rescale=1. / 255,
rotation_range=45,
width_shift_range=.15,
height_shift_range=.15,
horizontal_flip=False,
zoom_range=0.5
)
val_datagen=ImageDataGenerator(
rescale=1. / 255,
rotation_range=45,
width_shift_range=.15,
height_shift_range=.15,
horizontal_flip=False,
zoom_range=0.5
)
# 加载数据
train_ds=train_datagen.flow_from_directory(
data_dir,
target_size=(224,224),
batch_size=10, #迭代一次数据大小
class_mode='categorical'#如果One-hot就是categorical,二分类用binary
)
val_ds=val_datagen.flow_from_directory(
data_dir,
target_size=(224,224),
batch_size=20,
class_mode='categorical'
)
# 获取标签
class_names = list(train_generator.class_indices.keys())
print(class_names)
(2)、数据展示
图片展示
# 图片展示
for images, labels in train_ds:
for i in range(10):
ax = plt.subplot(5, 10, i + 1)
plt.imshow(images[i])
print(labels)
print(len(images))
plt.title(class_names[np.argmax(labels[i])])
plt.axis("off")
break
break
plt.show() #使用pycharm的需要加入这行代码才能将图像显示出来
五、搭建CNN网络
def vgg_net(num_layer,filter):
blk = Sequential()
for _ in range(num_layer):
blk.add(Conv2D(filters=filter,kernel_size=3,padding='same',activation='relu'))
blk.add(MaxPool2D(pool_size=(2,2),strides=2))
return blk
conv_arch = [(2,64),(2,128),(3,256),(3,512),(3,512)]
# model = Sequential([Conv2D(filters=64,kernel_size=3,padding='same',activation='relu',input_shape=(224,224,1))])
model = Sequential()
for num_layer,filter in conv_arch:
model.add(vgg_net(num_layer,filter))
# print(model.summary())
model.add(Sequential([
Flatten(),
Dense(4096,activation='relu'),
Dropout(0.5),
Dense(4096,activation='relu'),
Dropout(0.5),
Dense(len(class_names),activation='softmax')
]))
x = tf.random.uniform((1,224,224,3))
y = model(x)
model.compile(optimizer="adam",
loss ='categorical_crossentropy',
metrics =['accuracy'])
from tqdm import tqdm
import tensorflow.keras.backend as K
epochs = 10
lr = 1e-4
# 记录训练数据,方便后面的分析
history_train_loss = []
history_train_accuracy = []
history_val_loss = []
history_val_accuracy = []
for epoch in range(epochs):
train_total = len(train_ds)
val_total = len(val_ds)
"""
total:预期的迭代数目
ncols:控制进度条宽度
mininterval:进度更新最小间隔,以秒为单位(默认值:0.1)
"""
with tqdm(total=train_total, desc=f'Epoch {epoch + 1}/{epochs}', mininterval=1, ncols=100) as pbar:
lr = lr * 0.92
K.set_value(model.optimizer.lr, lr)
train_loss = []
train_accuracy = []
for image, label in train_ds:
"""
训练模型,简单理解train_on_batch就是:它是比model.fit()更高级的一个用法
想详细了解 train_on_batch 的同学,
可以看看这篇文章:https://www.yuque.com/mingtian-fkmxf/hv4lcq/ztt4gy
"""
history = model.train_on_batch(image, label)
train_loss.append(history[0])
train_accuracy.append(history[1])
pbar.set_postfix({"loss": "%.4f" % history[0],
"accuracy": "%.4f" % history[1],
"lr": K.get_value(model.optimizer.lr)})
pbar.update(1)
history_train_loss.append(np.mean(train_loss))
history_train_accuracy.append(np.mean(train_accuracy))
print('开始验证!')
with tqdm(total=val_total, desc=f'Epoch {epoch + 1}/{epochs}', mininterval=0.3, ncols=100) as pbar:
val_loss=[]
val_accuracy = []
for image, label in val_ds:
history = model.test_on_batch(image, label)
val_loss.append(history[0])
val_accuracy.append(history[1])
pbar.set_postfix({"loss": "%.4f" % history[0],
"accuracy": "%.4f" % history[1]})
pbar.update(1)
history_val_loss.append(np.mean(val_loss))
history_val_accuracy.append(np.mean(val_accuracy))
print('结束验证!')
print("验证loss为:%.4f" % np.mean(val_loss))
print("验证准确率为:%.4f" % np.mean(val_accuracy))
Epoch 1/10: 100%|██████████| 55/55 [00:55<00:00, 1.25it/s, loss=0.7950, accuracy=0.5200, lr=9.2e-5]
开始验证!
Epoch 1/10: 0%| | 0/14 [00:00<?, ?it/s]
Epoch 1/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.6692, accuracy=0.5400]
Epoch 1/10: 7%|█▌ | 1/14 [00:00<00:07, 1.67it/s, loss=0.6692, accuracy=0.5400]
Epoch 1/10: 7%|█▌ | 1/14 [00:00<00:07, 1.67it/s, loss=0.6247, accuracy=0.6600]
Epoch 1/10: 14%|███▏ | 2/14 [00:00<00:07, 1.67it/s, loss=0.6243, accuracy=0.6200]
Epoch 1/10: 21%|████▋ | 3/14 [00:01<00:06, 1.67it/s, loss=0.5732, accuracy=0.7600]
Epoch 1/10: 29%|██████▎ | 4/14 [00:01<00:02, 4.38it/s, loss=0.5732, accuracy=0.7600]
Epoch 1/10: 29%|██████▎ | 4/14 [00:01<00:02, 4.38it/s, loss=0.5970, accuracy=0.6600]
Epoch 1/10: 36%|███████▊ | 5/14 [00:01<00:02, 4.38it/s, loss=0.5614, accuracy=0.7400]
Epoch 1/10: 43%|█████████▍ | 6/14 [00:01<00:01, 4.38it/s, loss=0.5716, accuracy=0.6800]
Epoch 1/10: 50%|███████████ | 7/14 [00:01<00:01, 5.49it/s, loss=0.5716, accuracy=0.6800]
Epoch 1/10: 50%|███████████ | 7/14 [00:01<00:01, 5.49it/s, loss=0.5993, accuracy=0.7200]
Epoch 1/10: 57%|████████████▌ | 8/14 [00:01<00:01, 5.49it/s, loss=0.5803, accuracy=0.7400]
Epoch 1/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 5.49it/s, loss=0.4826, accuracy=0.8600]
Epoch 1/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.02it/s, loss=0.4826, accuracy=0.8600]
Epoch 1/10: 71%|███████████████ | 10/14 [00:02<00:00, 6.02it/s, loss=0.6271, accuracy=0.5800]
Epoch 1/10: 79%|████████████████▌ | 11/14 [00:02<00:00, 6.02it/s, loss=0.5784, accuracy=0.6600]
Epoch 1/10: 86%|██████████████████ | 12/14 [00:02<00:00, 6.02it/s, loss=0.6444, accuracy=0.6800]
Epoch 1/10: 93%|███████████████████▌ | 13/14 [00:02<00:00, 6.34it/s, loss=0.6444, accuracy=0.6800]
Epoch 1/10: 100%|█████████████████████| 14/14 [00:05<00:00, 2.55it/s, loss=0.6598, accuracy=0.6000]
Epoch 1/10: 100%|██████████| 55/55 [01:01<00:00, 1.11s/it, loss=0.7950, accuracy=0.5200, lr=9.2e-5]
Epoch 2/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.5995
验证准确率为:0.6786
Epoch 2/10: 98%|████████▊| 54/55 [00:26<00:00, 2.05it/s, loss=0.3791, accuracy=0.9000, lr=8.46e-5]
开始验证!
Epoch 2/10: 0%| | 0/14 [00:00<?, ?it/s]
Epoch 2/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.2396, accuracy=0.9200]
Epoch 2/10: 7%|█▌ | 1/14 [00:00<00:03, 3.43it/s, loss=0.2423, accuracy=0.9200]
Epoch 2/10: 14%|███▏ | 2/14 [00:00<00:02, 4.57it/s, loss=0.2737, accuracy=0.8800]
Epoch 2/10: 21%|████▋ | 3/14 [00:00<00:01, 6.85it/s, loss=0.2737, accuracy=0.8800]
Epoch 2/10: 21%|████▋ | 3/14 [00:00<00:01, 6.85it/s, loss=0.1539, accuracy=0.9000]
Epoch 2/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.85it/s, loss=0.2980, accuracy=0.9200]
Epoch 2/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.85it/s, loss=0.1904, accuracy=0.9200]
Epoch 2/10: 43%|█████████▍ | 6/14 [00:00<00:01, 6.86it/s, loss=0.1904, accuracy=0.9200]
Epoch 2/10: 43%|█████████▍ | 6/14 [00:01<00:01, 6.86it/s, loss=0.1032, accuracy=0.9600]
Epoch 2/10: 50%|███████████ | 7/14 [00:01<00:01, 6.86it/s, loss=0.1594, accuracy=0.9400]
Epoch 2/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.86it/s, loss=0.2330, accuracy=0.9600]
Epoch 2/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.90it/s, loss=0.2330, accuracy=0.9600]
Epoch 2/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.90it/s, loss=0.1394, accuracy=0.9800]
Epoch 2/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.90it/s, loss=0.2391, accuracy=0.8800]
Epoch 2/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.90it/s, loss=0.2008, accuracy=0.9000]
Epoch 2/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.94it/s, loss=0.2008, accuracy=0.9000]
Epoch 2/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.94it/s, loss=0.3320, accuracy=0.8600]
Epoch 2/10: 100%|█████████████████████| 14/14 [00:01<00:00, 7.12it/s, loss=0.1901, accuracy=0.9000]
Epoch 2/10: 100%|█████████| 55/55 [00:28<00:00, 1.94it/s, loss=0.3791, accuracy=0.9000, lr=8.46e-5]
Epoch 3/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.2139
验证准确率为:0.9171
Epoch 3/10: 98%|████████▊| 54/55 [00:26<00:00, 2.04it/s, loss=0.0466, accuracy=0.9800, lr=7.79e-5]
Epoch 3/10: 0%| | 0/14 [00:00<?, ?it/s]开始验证!
Epoch 3/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.1344, accuracy=0.9000]
Epoch 3/10: 7%|█▌ | 1/14 [00:00<00:03, 3.42it/s, loss=0.1919, accuracy=0.9200]
Epoch 3/10: 14%|███▏ | 2/14 [00:00<00:02, 4.59it/s, loss=0.2520, accuracy=0.9200]
Epoch 3/10: 21%|████▋ | 3/14 [00:00<00:01, 6.87it/s, loss=0.2520, accuracy=0.9200]
Epoch 3/10: 21%|████▋ | 3/14 [00:00<00:01, 6.87it/s, loss=0.0580, accuracy=1.0000]
Epoch 3/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.87it/s, loss=0.0744, accuracy=0.9600]
Epoch 3/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.87it/s, loss=0.1914, accuracy=0.9200]
Epoch 3/10: 43%|█████████▍ | 6/14 [00:00<00:01, 6.81it/s, loss=0.1914, accuracy=0.9200]
Epoch 3/10: 43%|█████████▍ | 6/14 [00:01<00:01, 6.81it/s, loss=0.0322, accuracy=1.0000]
Epoch 3/10: 50%|███████████ | 7/14 [00:01<00:01, 6.81it/s, loss=0.0940, accuracy=0.9800]
Epoch 3/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.81it/s, loss=0.1493, accuracy=0.9400]
Epoch 3/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.87it/s, loss=0.1493, accuracy=0.9400]
Epoch 3/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.87it/s, loss=0.0906, accuracy=0.9600]
Epoch 3/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.87it/s, loss=0.2302, accuracy=0.9000]
Epoch 3/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.87it/s, loss=0.1218, accuracy=0.9600]
Epoch 3/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.90it/s, loss=0.1218, accuracy=0.9600]
Epoch 3/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.90it/s, loss=0.2033, accuracy=0.9200]
Epoch 3/10: 100%|█████████████████████| 14/14 [00:01<00:00, 7.08it/s, loss=0.0882, accuracy=0.9333]
Epoch 3/10: 100%|█████████| 55/55 [00:28<00:00, 1.92it/s, loss=0.0466, accuracy=0.9800, lr=7.79e-5]
Epoch 4/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.1365
验证准确率为:0.9438
Epoch 4/10: 100%|█████████| 55/55 [00:27<00:00, 1.95it/s, loss=0.1313, accuracy=0.9600, lr=7.16e-5]
Epoch 4/10: 0%| | 0/14 [00:00<?, ?it/s]开始验证!
Epoch 4/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.1331, accuracy=0.9400]
Epoch 4/10: 7%|█▌ | 1/14 [00:00<00:04, 3.05it/s, loss=0.0935, accuracy=0.9800]
Epoch 4/10: 14%|███▏ | 2/14 [00:00<00:01, 6.11it/s, loss=0.0935, accuracy=0.9800]
Epoch 4/10: 14%|███▏ | 2/14 [00:00<00:01, 6.11it/s, loss=0.2275, accuracy=0.9400]
Epoch 4/10: 21%|████▋ | 3/14 [00:00<00:01, 6.11it/s, loss=0.0317, accuracy=1.0000]
Epoch 4/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.12it/s, loss=0.0317, accuracy=1.0000]
Epoch 4/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.12it/s, loss=0.1114, accuracy=0.9600]
Epoch 4/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.12it/s, loss=0.0937, accuracy=0.9400]
Epoch 4/10: 43%|█████████▍ | 6/14 [00:00<00:01, 6.26it/s, loss=0.0937, accuracy=0.9400]
Epoch 4/10: 43%|█████████▍ | 6/14 [00:01<00:01, 6.26it/s, loss=0.0238, accuracy=0.9800]
Epoch 4/10: 50%|███████████ | 7/14 [00:01<00:01, 6.26it/s, loss=0.0896, accuracy=0.9800]
Epoch 4/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.41it/s, loss=0.0896, accuracy=0.9800]
Epoch 4/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.41it/s, loss=0.1320, accuracy=0.9600]
Epoch 4/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.41it/s, loss=0.0116, accuracy=1.0000]
Epoch 4/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.41it/s, loss=0.1019, accuracy=0.9200]
Epoch 4/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.57it/s, loss=0.1019, accuracy=0.9200]
Epoch 4/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.57it/s, loss=0.1263, accuracy=0.9400]
Epoch 4/10: 86%|██████████████████ | 12/14 [00:02<00:00, 6.57it/s, loss=0.0810, accuracy=0.9200]
Epoch 4/10: 93%|███████████████████▌ | 13/14 [00:02<00:00, 6.57it/s, loss=0.0535, accuracy=0.9667]
Epoch 4/10: 100%|█████████████████████| 14/14 [00:02<00:00, 6.70it/s, loss=0.0535, accuracy=0.9667]
Epoch 4/10: 100%|█████████| 55/55 [00:29<00:00, 1.87it/s, loss=0.1313, accuracy=0.9600, lr=7.16e-5]
Epoch 5/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.0936
验证准确率为:0.9590
Epoch 5/10: 98%|████████▊| 54/55 [00:27<00:00, 1.94it/s, loss=0.0284, accuracy=0.9800, lr=6.59e-5]
Epoch 5/10: 0%| | 0/14 [00:00<?, ?it/s]开始验证!
Epoch 5/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.1285, accuracy=0.9400]
Epoch 5/10: 7%|█▌ | 1/14 [00:00<00:04, 2.92it/s, loss=0.0995, accuracy=0.9800]
Epoch 5/10: 14%|███▏ | 2/14 [00:00<00:02, 5.85it/s, loss=0.0995, accuracy=0.9800]
Epoch 5/10: 14%|███▏ | 2/14 [00:00<00:02, 5.85it/s, loss=0.1170, accuracy=0.9800]
Epoch 5/10: 21%|████▋ | 3/14 [00:00<00:01, 5.85it/s, loss=0.0193, accuracy=1.0000]
Epoch 5/10: 29%|██████▎ | 4/14 [00:00<00:01, 5.85it/s, loss=0.0193, accuracy=1.0000]
Epoch 5/10: 29%|██████▎ | 4/14 [00:00<00:01, 5.85it/s, loss=0.0619, accuracy=0.9800]
Epoch 5/10: 36%|███████▊ | 5/14 [00:01<00:01, 5.85it/s, loss=0.0564, accuracy=0.9800]
Epoch 5/10: 43%|█████████▍ | 6/14 [00:01<00:01, 5.87it/s, loss=0.0564, accuracy=0.9800]
Epoch 5/10: 43%|█████████▍ | 6/14 [00:01<00:01, 5.87it/s, loss=0.0180, accuracy=1.0000]
Epoch 5/10: 50%|███████████ | 7/14 [00:01<00:01, 5.87it/s, loss=0.0712, accuracy=0.9600]
Epoch 5/10: 57%|████████████▌ | 8/14 [00:01<00:01, 5.90it/s, loss=0.0712, accuracy=0.9600]
Epoch 5/10: 57%|████████████▌ | 8/14 [00:01<00:01, 5.90it/s, loss=0.1603, accuracy=0.9200]
Epoch 5/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 5.90it/s, loss=0.0212, accuracy=1.0000]
Epoch 5/10: 71%|███████████████ | 10/14 [00:01<00:00, 5.94it/s, loss=0.0212, accuracy=1.0000]
Epoch 5/10: 71%|███████████████ | 10/14 [00:01<00:00, 5.94it/s, loss=0.1483, accuracy=0.9600]
Epoch 5/10: 79%|████████████████▌ | 11/14 [00:02<00:00, 5.94it/s, loss=0.0767, accuracy=0.9800]
Epoch 5/10: 86%|██████████████████ | 12/14 [00:02<00:00, 6.02it/s, loss=0.0767, accuracy=0.9800]
Epoch 5/10: 86%|██████████████████ | 12/14 [00:02<00:00, 6.02it/s, loss=0.0880, accuracy=0.9600]
Epoch 5/10: 100%|█████████████████████| 14/14 [00:02<00:00, 6.17it/s, loss=0.0126, accuracy=1.0000]
Epoch 5/10: 100%|█████████| 55/55 [00:30<00:00, 1.83it/s, loss=0.0284, accuracy=0.9800, lr=6.59e-5]
Epoch 6/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.0771
验证准确率为:0.9743
Epoch 6/10: 98%|████████▊| 54/55 [00:28<00:00, 1.92it/s, loss=0.0023, accuracy=1.0000, lr=6.06e-5]
Epoch 6/10: 0%| | 0/14 [00:00<?, ?it/s]开始验证!
Epoch 6/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.1735, accuracy=0.9400]
Epoch 6/10: 7%|█▌ | 1/14 [00:00<00:03, 3.28it/s, loss=0.0859, accuracy=0.9600]
Epoch 6/10: 14%|███▏ | 2/14 [00:00<00:01, 6.56it/s, loss=0.0859, accuracy=0.9600]
Epoch 6/10: 14%|███▏ | 2/14 [00:00<00:01, 6.56it/s, loss=0.1493, accuracy=0.9800]
Epoch 6/10: 21%|████▋ | 3/14 [00:00<00:01, 6.56it/s, loss=0.0028, accuracy=1.0000]
Epoch 6/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.56it/s, loss=0.0705, accuracy=0.9800]
Epoch 6/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.69it/s, loss=0.0705, accuracy=0.9800]
Epoch 6/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.69it/s, loss=0.0208, accuracy=1.0000]
Epoch 6/10: 43%|█████████▍ | 6/14 [00:01<00:01, 6.69it/s, loss=0.0109, accuracy=1.0000]
Epoch 6/10: 50%|███████████ | 7/14 [00:01<00:01, 6.69it/s, loss=0.0476, accuracy=0.9800]
Epoch 6/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.74it/s, loss=0.0476, accuracy=0.9800]
Epoch 6/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.74it/s, loss=0.2229, accuracy=0.9200]
Epoch 6/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.74it/s, loss=0.0016, accuracy=1.0000]
Epoch 6/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.74it/s, loss=0.0714, accuracy=0.9400]
Epoch 6/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.74it/s, loss=0.0714, accuracy=0.9400]
Epoch 6/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.74it/s, loss=0.0613, accuracy=0.9400]
Epoch 6/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.74it/s, loss=0.0545, accuracy=0.9800]
Epoch 6/10: 93%|███████████████████▌ | 13/14 [00:02<00:00, 6.74it/s, loss=0.0455, accuracy=0.9667]
Epoch 6/10: 100%|█████████████████████| 14/14 [00:02<00:00, 6.89it/s, loss=0.0455, accuracy=0.9667]
Epoch 6/10: 100%|█████████| 55/55 [00:30<00:00, 1.80it/s, loss=0.0023, accuracy=1.0000, lr=6.06e-5]
Epoch 7/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.0727
验证准确率为:0.9705
Epoch 7/10: 98%|████████▊| 54/55 [00:28<00:00, 2.06it/s, loss=0.0925, accuracy=0.9800, lr=5.58e-5]
Epoch 7/10: 0%| | 0/14 [00:00<?, ?it/s]开始验证!
Epoch 7/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.1217, accuracy=0.9600]
Epoch 7/10: 7%|█▌ | 1/14 [00:00<00:03, 3.28it/s, loss=0.0499, accuracy=0.9800]
Epoch 7/10: 14%|███▏ | 2/14 [00:00<00:01, 6.54it/s, loss=0.0499, accuracy=0.9800]
Epoch 7/10: 14%|███▏ | 2/14 [00:00<00:01, 6.54it/s, loss=0.1077, accuracy=0.9800]
Epoch 7/10: 21%|████▋ | 3/14 [00:00<00:01, 6.54it/s, loss=0.0084, accuracy=1.0000]
Epoch 7/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.60it/s, loss=0.0084, accuracy=1.0000]
Epoch 7/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.60it/s, loss=0.0317, accuracy=0.9800]
Epoch 7/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.60it/s, loss=0.0497, accuracy=0.9800]
Epoch 7/10: 43%|█████████▍ | 6/14 [00:00<00:01, 6.62it/s, loss=0.0497, accuracy=0.9800]
Epoch 7/10: 43%|█████████▍ | 6/14 [00:01<00:01, 6.62it/s, loss=0.0032, accuracy=1.0000]
Epoch 7/10: 50%|███████████ | 7/14 [00:01<00:01, 6.62it/s, loss=0.0116, accuracy=1.0000]
Epoch 7/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.62it/s, loss=0.1292, accuracy=0.9400]
Epoch 7/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.68it/s, loss=0.1292, accuracy=0.9400]
Epoch 7/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.68it/s, loss=0.0031, accuracy=1.0000]
Epoch 7/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.68it/s, loss=0.0670, accuracy=0.9800]
Epoch 7/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.68it/s, loss=0.0416, accuracy=0.9800]
Epoch 7/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.75it/s, loss=0.0416, accuracy=0.9800]
Epoch 7/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.75it/s, loss=0.0323, accuracy=0.9800]
Epoch 7/10: 100%|█████████████████████| 14/14 [00:02<00:00, 6.91it/s, loss=0.0175, accuracy=1.0000]
Epoch 7/10: 100%|█████████| 55/55 [00:30<00:00, 1.78it/s, loss=0.0925, accuracy=0.9800, lr=5.58e-5]
Epoch 8/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.0482
验证准确率为:0.9829
Epoch 8/10: 98%|████████▊| 54/55 [00:28<00:00, 1.91it/s, loss=0.0016, accuracy=1.0000, lr=5.13e-5]
Epoch 8/10: 0%| | 0/14 [00:00<?, ?it/s]开始验证!
Epoch 8/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.1328, accuracy=0.9600]
Epoch 8/10: 7%|█▌ | 1/14 [00:00<00:03, 3.32it/s, loss=0.0430, accuracy=0.9600]
Epoch 8/10: 14%|███▏ | 2/14 [00:00<00:01, 6.62it/s, loss=0.0430, accuracy=0.9600]
Epoch 8/10: 14%|███▏ | 2/14 [00:00<00:01, 6.62it/s, loss=0.1390, accuracy=0.9800]
Epoch 8/10: 21%|████▋ | 3/14 [00:00<00:01, 6.62it/s, loss=0.0029, accuracy=1.0000]
Epoch 8/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.64it/s, loss=0.0029, accuracy=1.0000]
Epoch 8/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.64it/s, loss=0.0137, accuracy=1.0000]
Epoch 8/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.64it/s, loss=0.0734, accuracy=0.9600]
Epoch 8/10: 43%|█████████▍ | 6/14 [00:01<00:01, 6.64it/s, loss=0.0021, accuracy=1.0000]
Epoch 8/10: 50%|███████████ | 7/14 [00:01<00:01, 6.65it/s, loss=0.0021, accuracy=1.0000]
Epoch 8/10: 50%|███████████ | 7/14 [00:01<00:01, 6.65it/s, loss=0.0032, accuracy=1.0000]
Epoch 8/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.65it/s, loss=0.2002, accuracy=0.9400]
Epoch 8/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.65it/s, loss=0.0039, accuracy=1.0000]
Epoch 8/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.65it/s, loss=0.0039, accuracy=1.0000]
Epoch 8/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.65it/s, loss=0.1951, accuracy=0.9400]
Epoch 8/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.65it/s, loss=0.1133, accuracy=0.9600]
Epoch 8/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.65it/s, loss=0.0187, accuracy=1.0000]
Epoch 8/10: 93%|███████████████████▌ | 13/14 [00:01<00:00, 6.69it/s, loss=0.0187, accuracy=1.0000]
Epoch 8/10: 100%|█████████████████████| 14/14 [00:02<00:00, 6.87it/s, loss=0.0072, accuracy=1.0000]
Epoch 8/10: 100%|█████████| 55/55 [00:30<00:00, 1.78it/s, loss=0.0016, accuracy=1.0000, lr=5.13e-5]
Epoch 9/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.0677
验证准确率为:0.9786
Epoch 9/10: 100%|█████████| 55/55 [00:28<00:00, 1.88it/s, loss=0.1454, accuracy=0.9800, lr=4.72e-5]
开始验证!
Epoch 9/10: 0%| | 0/14 [00:00<?, ?it/s]
Epoch 9/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.0488, accuracy=0.9800]
Epoch 9/10: 7%|█▌ | 1/14 [00:00<00:04, 3.21it/s, loss=0.0275, accuracy=0.9800]
Epoch 9/10: 14%|███▏ | 2/14 [00:00<00:01, 6.42it/s, loss=0.0275, accuracy=0.9800]
Epoch 9/10: 14%|███▏ | 2/14 [00:00<00:01, 6.42it/s, loss=0.1349, accuracy=0.9800]
Epoch 9/10: 21%|████▋ | 3/14 [00:00<00:01, 6.42it/s, loss=0.0158, accuracy=1.0000]
Epoch 9/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.45it/s, loss=0.0158, accuracy=1.0000]
Epoch 9/10: 29%|██████▎ | 4/14 [00:00<00:01, 6.45it/s, loss=0.0304, accuracy=0.9800]
Epoch 9/10: 36%|███████▊ | 5/14 [00:00<00:01, 6.45it/s, loss=0.0252, accuracy=1.0000]
Epoch 9/10: 43%|█████████▍ | 6/14 [00:00<00:01, 6.48it/s, loss=0.0252, accuracy=1.0000]
Epoch 9/10: 43%|█████████▍ | 6/14 [00:01<00:01, 6.48it/s, loss=0.0157, accuracy=0.9800]
Epoch 9/10: 50%|███████████ | 7/14 [00:01<00:01, 6.48it/s, loss=0.0130, accuracy=1.0000]
Epoch 9/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.50it/s, loss=0.0130, accuracy=1.0000]
Epoch 9/10: 57%|████████████▌ | 8/14 [00:01<00:00, 6.50it/s, loss=0.1652, accuracy=0.9400]
Epoch 9/10: 64%|██████████████▏ | 9/14 [00:01<00:00, 6.50it/s, loss=0.0035, accuracy=1.0000]
Epoch 9/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.53it/s, loss=0.0035, accuracy=1.0000]
Epoch 9/10: 71%|███████████████ | 10/14 [00:01<00:00, 6.53it/s, loss=0.0517, accuracy=0.9800]
Epoch 9/10: 79%|████████████████▌ | 11/14 [00:01<00:00, 6.53it/s, loss=0.0636, accuracy=0.9600]
Epoch 9/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.55it/s, loss=0.0636, accuracy=0.9600]
Epoch 9/10: 86%|██████████████████ | 12/14 [00:01<00:00, 6.55it/s, loss=0.0324, accuracy=0.9800]
Epoch 9/10: 100%|█████████████████████| 14/14 [00:02<00:00, 6.72it/s, loss=0.0075, accuracy=1.0000]
Epoch 9/10: 100%|█████████| 55/55 [00:30<00:00, 1.81it/s, loss=0.1454, accuracy=0.9800, lr=4.72e-5]
Epoch 10/10: 0%| | 0/55 [00:00<?, ?it/s]结束验证!
验证loss为:0.0454
验证准确率为:0.9829
Epoch 10/10: 100%|████████| 55/55 [00:28<00:00, 1.92it/s, loss=0.0038, accuracy=1.0000, lr=4.34e-5]
开始验证!
Epoch 10/10: 0%| | 0/14 [00:00<?, ?it/s]
Epoch 10/10: 0%| | 0/14 [00:00<?, ?it/s, loss=0.0362, accuracy=0.9800]
Epoch 10/10: 7%|█▌ | 1/14 [00:00<00:03, 3.36it/s, loss=0.0047, accuracy=1.0000]
Epoch 10/10: 14%|███ | 2/14 [00:00<00:02, 4.48it/s, loss=0.0704, accuracy=0.9800]
Epoch 10/10: 21%|████▌ | 3/14 [00:00<00:01, 6.72it/s, loss=0.0704, accuracy=0.9800]
Epoch 10/10: 21%|████▌ | 3/14 [00:00<00:01, 6.72it/s, loss=0.0008, accuracy=1.0000]
Epoch 10/10: 29%|██████ | 4/14 [00:00<00:01, 6.72it/s, loss=0.0132, accuracy=1.0000]
Epoch 10/10: 36%|███████▌ | 5/14 [00:00<00:01, 6.72it/s, loss=0.0076, accuracy=1.0000]
Epoch 10/10: 43%|█████████ | 6/14 [00:00<00:01, 6.75it/s, loss=0.0076, accuracy=1.0000]
Epoch 10/10: 43%|█████████ | 6/14 [00:01<00:01, 6.75it/s, loss=0.0011, accuracy=1.0000]
Epoch 10/10: 50%|██████████▌ | 7/14 [00:01<00:01, 6.75it/s, loss=0.0001, accuracy=1.0000]
Epoch 10/10: 57%|████████████ | 8/14 [00:01<00:00, 6.75it/s, loss=0.1884, accuracy=0.9400]
Epoch 10/10: 64%|█████████████▌ | 9/14 [00:01<00:00, 6.81it/s, loss=0.1884, accuracy=0.9400]
Epoch 10/10: 64%|█████████████▌ | 9/14 [00:01<00:00, 6.81it/s, loss=0.0014, accuracy=1.0000]
Epoch 10/10: 71%|██████████████▎ | 10/14 [00:01<00:00, 6.81it/s, loss=0.1360, accuracy=0.9600]
Epoch 10/10: 79%|███████████████▋ | 11/14 [00:01<00:00, 6.81it/s, loss=0.0768, accuracy=0.9600]
Epoch 10/10: 86%|█████████████████▏ | 12/14 [00:01<00:00, 6.85it/s, loss=0.0768, accuracy=0.9600]
Epoch 10/10: 86%|█████████████████▏ | 12/14 [00:01<00:00, 6.85it/s, loss=0.0009, accuracy=1.0000]
Epoch 10/10: 100%|████████████████████| 14/14 [00:01<00:00, 7.03it/s, loss=0.0004, accuracy=1.0000]
Epoch 10/10: 100%|████████| 55/55 [00:30<00:00, 1.82it/s, loss=0.0038, accuracy=1.0000, lr=4.34e-5]
结束验证!
验证loss为:0.0384
验证准确率为:0.9871
六、绘制损失函数图像和准确度图像
绘制代码与前几周相同
# 画准确度图
epochs_range = range(epochs)
plt.figure(figsize=(12, 4))
plt.subplot(1, 2, 1)
plt.plot(epochs_range, history_train_accuracy, label='Training Accuracy')
plt.plot(epochs_range, history_val_accuracy, label='Validation Accuracy')
plt.legend(loc='lower right')
plt.title('Training and Validation Accuracy')
plt.subplot(1, 2, 2)
plt.plot(epochs_range, history_train_loss, label='Training Loss')
plt.plot(epochs_range, history_val_loss, label='Validation Loss')
plt.legend(loc='upper right')
plt.title('Training and Validation Loss')
plt.show()
七、模型预测
plt.figure(figsize=(18,3))
plt.suptitle("预测结果展示")
for images,labels in val_ds:
for i in range(8):
ax = plt.subplot(1,8,i+1)
# 显示图片
plt.imshow(images[i].numpy())
# 需要给图片增加一个维度
img_array = tf.expand_dims(images[i],0)
# 进行预测
predictions = model.predict(img_array)
plt.title(class_names[np.argmax(predictions)])
plt.axis('off')
plt.show()
以上就是我本周的学习内容