soho做网站要写品牌吗专业网页制作地址
soho做网站要写品牌吗,专业网页制作地址,app大全软件网站免费下载,如何启动wordpressLeNet-5卷积神经网络是最经典的卷积网络之一#xff0c;这篇文章就在LeNet-5的基础上加入了一些tensorflow的有趣函数#xff0c;对LeNet-5做了改动#xff0c;也是对一些tf函数的实例化笔记吧。环境 Pycharm2019Python3.7.6tensorflow 2.0 话不多说#xff0c;先放完整源码…LeNet-5卷积神经网络是最经典的卷积网络之一这篇文章就在LeNet-5的基础上加入了一些tensorflow的有趣函数对LeNet-5做了改动也是对一些tf函数的实例化笔记吧。环境 Pycharm2019Python3.7.6tensorflow 2.0 话不多说先放完整源码from tensorflow.keras import layers, datasets, Sequential, losses, optimizers
import tensorflow as tf
import matplotlib.pyplot as pltdef get_data():(train_images, train_labels), (val_images, val_labels) datasets.mnist.load_data()return train_images, train_labels, val_images, val_labelsdef model_build():network Sequential([layers.Conv2D(6, kernel_size3, strides1, input_shape(28, 28, 1)),layers.MaxPool2D(pool_size2, strides2),layers.ReLU(),layers.Conv2D(16, kernel_size3, strides1),layers.MaxPool2D(pool_size2, strides2),layers.ReLU(),layers.Conv2D(24, kernel_size3, strides1),layers.MaxPool2D(pool_size2, strides2),layers.ReLU(),layers.Flatten(),layers.Dense(120, activationrelu),layers.Dropout(0.5),layers.Dense(84, activationrelu),layers.Dense(10) # 因为输出的是独热编码设置为10])network.summary()return networktrain_images, train_labels, val_images, val_labels get_data()
plt.figure()
plt.imshow(train_images[0]) # 打印第一张图片检查数据
plt.colorbar() # 色度条显示
plt.grid(False) # 不显示网格
plt.show()
print(train_images.shape, train_labels.shape)
检查数据标签是否正确lables [0, 1, 2, 3, 4,5, 6, 7, 8, 9]
plt.figure(figsize(10, 10))
for i in range(25):plt.subplot(5, 5, i 1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i], cmapplt.cm.binary)plt.xlabel(lables[train_labels[i]])
plt.show()
train_images tf.expand_dims(train_images, axis3)
val_images tf.expand_dims(val_images, axis3)
train_labels tf.cast(train_labels, tf.int32)
val_labels tf.cast(val_labels, tf.int32)
train_labels tf.one_hot(train_labels, depth10)
val_labels tf.one_hot(val_labels, depth10)
train_images tf.convert_to_tensor(train_images)
print(train_images.dtype, train_labels.dtype)
if train_images.dtype ! tf.float32:train_images tf.cast(train_images, tf.float32)
print(train_images, train_labels)model model_build()
earlystop_callback tf.keras.callbacks.EarlyStopping(monitorval_acc, min_delta0.001, patience112)
model.compile(losstf.keras.losses.CategoricalCrossentropy(from_logitsTrue), optimizeradam, metrics[acc])
hist model.fit(train_images, train_labels, epochs20, batch_size28, validation_data[val_images, val_labels],callbacks[earlystop_callback])print(hist.history.keys())
print(hist.history[acc])from tensorflow.keras import layers, datasets, Sequential, losses, optimizers
import tensorflow as tf
import matplotlib.pyplot as plt先导入我们所需要的库为了方便我把 layers, datasets, Sequential, losses, optimizers做了特别导入。def get_data():(train_images, train_labels), (val_images, val_labels) datasets.mnist.load_data()return train_images, train_labels, val_images, val_labels定义数据获取函数从tensorflow的mnist中使用load_data()获取手写数字数据集我们在这里会得到四个张量(train_images, train_labels), (val_images, val_labels)分别为训练图像训练标签验证图像验证标签。其中images的张量形状为(60000, 28, 28) labels张量形状为(60000, )labels和images图像和标签索引相互对应。def model_build():network Sequential([layers.Conv2D(6, kernel_size3, strides1, input_shape(28, 28, 1)),layers.MaxPool2D(pool_size2, strides2),layers.ReLU(),layers.Conv2D(16, kernel_size3, strides1),layers.MaxPool2D(pool_size2, strides2),layers.ReLU(),layers.Conv2D(24, kernel_size3, strides1),layers.MaxPool2D(pool_size2, strides2),layers.ReLU(),layers.Flatten(),layers.Dense(120, activationrelu),layers.Dropout(0.5),layers.Dense(84, activationrelu),layers.Dense(10) # 因为输出的是独热编码设置为10])network.summary()return network定义模型搭建函数使用了Sequential封装网络layers.Conv2D(6, kernel_size3, strides1, input_shape(28, 28, 1)),加入第一层为Conv2D卷积层卷积核个数为6个 感受野为3*3卷积步长为1网格输入张量形状为28 281现在我们主要讨论卷积在tf里的实现方式卷积算法我会在未来另一篇文章中介绍这里不再赘述。 layers.MaxPool2D(pool_size2, strides2),池化层选用了MaxPool2D最大池化层池化域2*2, 步长为2pool_size2, strides2是一种常见的参数设置可以使数据宽高缩小到原来的一半算法到时候和卷积一并介绍。layers.ReLU(),激活函数层, 选用‘relu’函数layers.Flatten(),
layers.Dense(120, activationrelu),
layers.Dropout(0.5),
layers.Dense(84, activationrelu),
layers.Dense(10)这一部分为全连接层在将数据输入全连接层前要先使用flatten层对数据进行铺平处理。可以设置dropout层“退火”防止过拟合因为我们最后实现分类时我们使用了独热编码来代替原来的label 所以在最后的输出层设置了10。train_images, train_labels, val_images, val_labels get_data()
plt.figure()
plt.imshow(train_images[0]) # 打印第一张图片检查数据
plt.colorbar() # 色度条显示
plt.grid(False) # 不显示网格
plt.show()
print(train_images.shape, train_labels.shape)
检查数据标签是否正确
lables [0, 1, 2, 3, 4,5, 6, 7, 8, 9]
plt.figure(figsize(10, 10))
for i in range(25):plt.subplot(5, 5, i 1)plt.xticks([])plt.yticks([])plt.grid(False)plt.imshow(train_images[i], cmapplt.cm.binary)plt.xlabel(lables[train_labels[i]])从get_data函数中加载我们所需要的数据集打印第一张图片检查数据集标签是否正确正确的标签使我们训练的关键因素。我们应该能得到这样的图片标签表发现标签对应是正确的我们便可以继续。图像展示函数使用的matplotlib库具体不再介绍。train_images tf.expand_dims(train_images, axis3)
val_images tf.expand_dims(val_images, axis3)
train_labels tf.cast(train_labels, tf.int32)
val_labels tf.cast(val_labels, tf.int32)
train_labels tf.one_hot(train_labels, depth10)
val_labels tf.one_hot(val_labels, depth10)
network model_build()
train_images tf.convert_to_tensor(train_images)
print(train_images.dtype, train_labels.dtype)
if train_images.dtype ! tf.float32:train_images tf.cast(train_images, tf.float32)
print(train_images, train_labels)对数据的预处理我觉得这部分很重要在编写这个卷积网络时我在数据的准备上犯了很多错误导致程序无法运行或训练效果很差等。train_images tf.expand_dims(train_images, axis3)
val_images tf.expand_dims(val_images, axis3)我们在上面说过我们image的shape为(60000, 28, 28)但2d卷积层的输入要求为4个维度我们便将所有的image数据扩充了一个维度变为(60000, 28, 28, 1) 灰白图像。train_labels tf.cast(train_labels, tf.int32)
val_labels tf.cast(val_labels, tf.int32)
train_labels tf.one_hot(train_labels, depth10)
val_labels tf.one_hot(val_labels, depth10)我们要将标签形式转化为独热编码比如 [1]--[0, 1, 0, 0, 0, 0, 0 ,0 ,0, 0] 2--[0, 0, 1, 0, 0, 0, 0 ,0 ,0, 0],这样的好处是规避了标签本身可能存在的数据比较比如 ‘1’标签大于‘2’标签但在分类时标签‘1’和‘2’并没有大小关系独热编码就很好的规避了这种可能存在的比较。但在将编码独热化前需要将label的数据转化成int32否则会报错network model_build()
train_images tf.convert_to_tensor(train_images)
print(train_images.dtype, train_labels.dtype)
if train_images.dtype ! tf.float32:train_images tf.cast(train_images, tf.float32)
print(train_images, train_labels)Conv2D的输入类型为 tf.float32 model model_build()
earlystop_callback tf.keras.callbacks.EarlyStopping(monitorval_acc, min_delta0.001, patience112)
model.compile(losstf.keras.losses.CategoricalCrossentropy(from_logitsTrue), optimizeradam, metrics[acc])
hist model.fit(train_images, train_labels, epochs20, batch_size28, validation_data[val_images, val_labels],callbacks[earlystop_callback])编译训练的设置十分重要这里的参数对准确率有很大的影响。我们先搭建网络earlystop_callback tf.keras.callbacks.EarlyStopping(monitorval_acc, min_delta0.001, patience112)使用了一个早停callback 监控对象为验证集准确率监控的分度值为0.001步数112实现了如果模型在连续在112次内val_acc始终没有在0.001的分度上有所提升就认为已经收敛了训练结束。这个callback内的参数是随意设置的根据自己的目的参数可以调整合理范围内一般不影响准确率。model.compile(losstf.keras.losses.CategoricalCrossentropy(from_logitsTrue), optimizeradam, metrics[acc])
hist model.fit(train_images, train_labels, epochs20, batch_size28, validation_data[val_images, val_labels],callbacks[earlystop_callback])模型编译中我们在分类的损失函数中一般选择CategoricalCrossentropy(from_logitsTrue)交叉熵损失函数其中在最后参数选定为True使用softmax修订结果softmax可以将值转化为概率值这个选项会对训练的准确度产生巨大影响。softmax()训练模型print(hist.history.keys())
print(hist.history[acc])在最后我用hist变量接受我们训练的数据我们可以看到在epoch 16中我们的准确率已经达到了较高的水平。可以通过hist.history返回的字典得到我们训练的误差等信息进行误差图像等可视化的设置我在上一篇的全连接网络实例中介绍了一种简单的可视化方法。在tensorflow的官网中可以学习他们对数据结果可视化的样例。比如我大概修改后我们可以得到这样的效果蓝色条为模型对他分类的信任度比如第一个模型认为他有100%的概率认为这个数字是7。这篇CNN LeNet-5的实例笔记结束了顺便提一句这个手写数字数据集在上一篇提到的全连接神经网络中的准确率高达99.5%。LeNet-5在简单的灰色手写数字数据集的识别效果很好但在复杂彩色图像下性能就会急剧下降下一篇介绍预计为VGG13卷积神经网络可以对更复杂图像进行识别。最近时间不太充裕晚一些我会继续发布在tensorflow与神经网络专栏中。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89100.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!