济南网站建设联系小七,上海网站代优化,怎么查看网站点击量,科普网站栏目建设方案文章目录 一、准备环境二、准备数据三、搭建训练网络三、训练模型#xff08;1#xff09;VSCode训练情况#xff1a;#xff08;2#xff09;jupyter notebook训练情况#xff1a; 四、模型评估 模型预测1、绘制Accuracy-Loss图2、显示model2的预测效果 五、总结1… 文章目录 一、准备环境二、准备数据三、搭建训练网络三、训练模型1VSCode训练情况2jupyter notebook训练情况 四、模型评估 模型预测1、绘制Accuracy-Loss图2、显示model2的预测效果 五、总结1、plt.savefig(./数据展示.jpg)保存的图片在文件夹内打开是空白的如下图所示2. 优化器是什么包括哪些 本文为365天深度学习训练营 中的学习记录博客 原作者K同学啊 | 接辅导、项目定制 本文主要探究不同优化器、以及不同参数配置对模型的影响最终对Adam、SGD优化器进行比较并绘制比较结果。
使用的数据集为咖啡豆数据集共有四类。
优化器常用的有Adam、SGD。优化器的归纳将放在文末的总结部分。
本文将使用Adam优化器的模型命名为model1使用SGD优化器的模型命名为model2然后根据模型训练结果绘制各自的Accuracy-Loss图。比较得出在运行环境、epoch次数相同、模型结构相同等条件下Adam优化器的整体情况要优于SGD优化器。
一、准备环境
# 1. 设置环境
import sys
import tensorflow as tf
from datetime import datetimefrom tensorflow import keras
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import warnings,os,PIL,pathlibprint(---------------------1.配置环境------------------)
print(Start time: , datetime.today())
print(tensorflow version: tf.__version__)
print(Python version: sys.version)gpus tf.config.list_physical_devices(GPU)if gpus:gpu0 gpus[0] #如果有多个GPU仅使用第0个GPUtf.config.experimental.set_memory_growth(gpu0, True) #设置GPU显存用量按需使用tf.config.set_visible_devices([gpu0],GPU)# 打印显卡信息确认GPU可用print(GPU: gpus)
else:print(Using CPU)warnings.filterwarnings(ignore) #忽略警告信息
plt.rcParams[font.sans-serif] [SimHei] # 用来正常显示中文标签
plt.rcParams[axes.unicode_minus] False # 用来正常显示负号Q1 VSCode虚拟环境安装pandas 二、准备数据
# 2.导入数据
# 本次使用咖啡豆数据集共4类
print(---------------------2.1 从本地读取数据------------------)
data_dir D:/jupyter notebook/DL-100-days/datasets/coffebeans-data
data_dir pathlib.Path(data_dir)
image_count len(list(data_dir.glob(*/*)))
print(图片总数为,image_count)batch_size 16
img_height 336
img_width 336
关于image_dataset_from_directory()的详细介绍可以参考文章https://mtyjkh.blog.csdn.net/article/details/117018789print(---------------------2.2 划分训练数据------------------)
train_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.2,subsettraining,seed12,image_size(img_height, img_width),batch_sizebatch_size)
关于image_dataset_from_directory()的详细介绍可以参考文章https://mtyjkh.blog.csdn.net/article/details/117018789print(---------------------2.3 划分验证数据------------------)
val_ds tf.keras.preprocessing.image_dataset_from_directory(data_dir,validation_split0.2,subsetvalidation,seed12,image_size(img_height, img_width),batch_sizebatch_size)print(---------------------2.4 打印数据类别 数据的shape------------------)
class_names train_ds.class_names
print(class_names)for image_batch, labels_batch in train_ds:print(image_batch.shape)print(labels_batch.shape)breakprint(---------------------2.5 配置数据集------------------)
AUTOTUNE tf.data.AUTOTUNEdef train_preprocessing(image,label):return (image/255.0,label)train_ds (train_ds.cache().shuffle(1000).map(train_preprocessing) # 这里可以设置预处理函数
# .batch(batch_size) # 在image_dataset_from_directory处已经设置了batch_size.prefetch(buffer_sizeAUTOTUNE)
)val_ds (val_ds.cache().shuffle(1000).map(train_preprocessing) # 这里可以设置预处理函数
# .batch(batch_size) # 在image_dataset_from_directory处已经设置了batch_size.prefetch(buffer_sizeAUTOTUNE)
)print(---------------------2.6 数据可视化显示部分样本图片------------------)
plt.figure(figsize(10, 8)) # 图形的宽为10高为5
plt.suptitle(数据展示)for images, labels in train_ds.take(1):for i in range(15):plt.subplot(4, 5, i 1)plt.xticks([])plt.yticks([])plt.grid(False)# 显示图片plt.imshow(images[i])# 显示标签plt.xlabel(class_names[labels[i]-1])plt.show()
plt.savefig(./数据展示.jpg)Q2plt.savefig(./数据展示.jpg)保存的图片在文件夹内打开是空白的 三、搭建训练网络
print(---------------------3. 搭建训练网络此处预训练模型调用VGG-16官方模型------------------)
# 自定义一个创建模型的函数形参是优化器类型预训练模型是VGG-16但屏蔽了自带的训练部分以及顶层然后对输出进行处理
# 在此处创建了两个网络拥有不同的优化器类型
from tensorflow.keras.layers import Dropout,Dense,BatchNormalization
from tensorflow.keras.models import Modeldef create_model(optimizeradam):# 加载预训练模型vgg16_base_model tf.keras.applications.vgg16.VGG16(weightsimagenet,include_topFalse,input_shape(img_width, img_height, 3),poolingavg)for layer in vgg16_base_model.layers:layer.trainable FalseX vgg16_base_model.outputX Dense(170, activationrelu)(X)X BatchNormalization()(X)X Dropout(0.5)(X)output Dense(len(class_names), activationsoftmax)(X)vgg16_model Model(inputsvgg16_base_model.input, outputsoutput)vgg16_model.compile(optimizeroptimizer,losssparse_categorical_crossentropy,metrics[accuracy])return vgg16_modelmodel1 create_model(optimizertf.keras.optimizers.Adam())
model2 create_model(optimizertf.keras.optimizers.SGD())
model2.summary()三、训练模型
print(---------------------4.启动训练epoch50------------------)
# try加入早停试一下一个epoch跑完要220s时间还是有点久
NO_EPOCHS 50history_model1 model1.fit(train_ds, epochsNO_EPOCHS, verbose1, validation_dataval_ds)
history_model2 model2.fit(train_ds, epochsNO_EPOCHS, verbose1, validation_dataval_ds)1VSCode训练情况
model1.fit()Adam优化器 model2.fit()SGD优化器
2jupyter notebook训练情况
model1.fit()即Adam优化器 model2.fit()即SGD优化器
四、模型评估 模型预测
1、绘制Accuracy-Loss图
print(---------------------5.1 模型评估绘制Accuracy-Loss图------------------)
from matplotlib.ticker import MultipleLocator
plt.rcParams[savefig.dpi] 300 #图片像素
plt.rcParams[figure.dpi] 300 #分辨率acc1 history_model1.history[accuracy]
acc2 history_model2.history[accuracy]
val_acc1 history_model1.history[val_accuracy]
val_acc2 history_model2.history[val_accuracy]loss1 history_model1.history[loss]
loss2 history_model2.history[loss]
val_loss1 history_model1.history[val_loss]
val_loss2 history_model2.history[val_loss]epochs_range range(len(acc1))plt.figure(figsize(16, 4))
plt.subplot(1, 2, 1)plt.plot(epochs_range, acc1, labelTraining Accuracy-Adam)
plt.plot(epochs_range, acc2, labelTraining Accuracy-SGD)
plt.plot(epochs_range, val_acc1, labelValidation Accuracy-Adam)
plt.plot(epochs_range, val_acc2, labelValidation Accuracy-SGD)
plt.legend(loclower right)
plt.title(Training and Validation Accuracy)
# 设置刻度间隔x轴每1一个刻度
ax plt.gca()
ax.xaxis.set_major_locator(MultipleLocator(1))plt.subplot(1, 2, 2)
plt.plot(epochs_range, loss1, labelTraining Loss-Adam)
plt.plot(epochs_range, loss2, labelTraining Loss-SGD)
plt.plot(epochs_range, val_loss1, labelValidation Loss-Adam)
plt.plot(epochs_range, val_loss2, labelValidation Loss-SGD)
plt.legend(locupper right)
plt.title(Training and Validation Loss)# 设置刻度间隔x轴每1一个刻度
ax plt.gca()
ax.xaxis.set_major_locator(MultipleLocator(1))
plt.savefig(./Accuracy-Loss图.jpg)
plt.show()plt.show()显示的图片 比较Accuracy图表可以看出训练时Adam优化器的表现要稍优于SGD优化器而验证时则相反。 Q: VSCode绘制出来的图咋这么奇怪 改变plt.savefig(./Accuracy-Loss图.jpg)的位置后所保存的图片比直接plt.show()的图片比例要好些。 2、显示model2的预测效果
print(---------------------5.2 模型预测------------------)
def test_accuracy_report(model):score model.evaluate(val_ds, verbose0)print(Loss function: %s, accuracy: % score[0], score[1])test_accuracy_report(model2)VSCode环境下的预测结果 jupyter notebook环境下的预测结果
五、总结
1、plt.savefig(./数据展示.jpg)保存的图片在文件夹内打开是空白的如下图所示 将保存的语句放在plt.show()之前因为plt.show()之后会默认打开一个空白画板。
2. 优化器是什么包括哪些
参考文章也是来自训练营文章
优化器是什么
优化器是一种算法它在模型优化过程中动态地调整梯度的大小和方向使模型能够收敛到更好的位置或者用更快的速度进行收敛。各类优化器方法总结如下