实验12 卷积神经网络

这篇具有很好参考价值的文章主要介绍了实验12 卷积神经网络。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 实验目的

①掌握深度学习的基本原理;
②能够使用TensorFlow实现卷积神经网络,完成图像识别任务。

2. 实验内容

①设计卷积神经网络模型,实现对Mnist手写数字数据集的识别,并以可视化的形式输出模型训练的过程和结果;
②设计卷积神经网络模型,实现对Cifar10数据集的识别,并以可视化的形式输出模型训练的过程和结果。

3. 实验过程

题目一:

  使用Keras构建和训练卷积神经网络,实现对Mnist手写数字数据集的识别,并测试模型性能,以恰当的形式展现训练过程和结果。
要求:
  ⑴编写代码,构建卷积神经网络,实现上述功能。
  ⑵调整超参数,记录实验过程和结果。
调整卷积神经网络的结构和训练参数,找出最佳的结构和超参数,记录和分析实验结果;
  ⑶保存最佳模型,计算各层参数个数和模型总参数;
  ⑷分析和总结:
  你都调整了哪些参数?结合训练过程,说明各个超参数对模型性能的影响;
① 代码

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import pandas as pd

#加载数据集
mnist = tf.keras.datasets.mnist
(train_x,train_y),(test_x,test_y) = mnist.load_data()

#对属性进行归一化,使它的取值在0-1之间,同时转换为tensor张量,类型为tf.flost32
X_train = train_x.reshape(60000,28,28,1)
X_test = test_x.reshape(10000,28,28,1)

X_train,X_test = tf.cast(X_train / 255.0,tf.float32),tf.cast(X_test / 255.0,tf.float32)
y_train,y_test = tf.cast(train_y,tf.int32),tf.cast(test_y,tf.int32)

#建立模型
model = tf.keras.Sequential([
     #unit1
    tf.keras.layers.Conv2D(16,kernel_size=(3,3),padding="same",activation=tf.nn.relu,input_shape=(28,28,1)),
    tf.keras.layers.MaxPool2D(pool_size=(2,2)),

    #unit2
    tf.keras.layers.Conv2D(32,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    tf.keras.layers.MaxPool2D(pool_size=(2,2)),

    #unit3
    tf.keras.layers.Flatten(),

    #unit4
    tf.keras.layers.Dense(128,activation="relu"),
    tf.keras.layers.Dense(10,activation="softmax")
])

#配置训练方法
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['sparse_categorical_accuracy'])

#训练模型
history = model.fit(X_train,y_train,batch_size=64,epochs=5,validation_split=0.2)

#评估模型
model.evaluate(X_test,y_test,verbose=2)
pd.DataFrame(history.history).to_csv("training_log.csv",index=False)
graph = pd.read_csv('training_log.csv')

#使用模型
for i in range(10):
    num = np.random.randint(1,10000)

    plt.subplot(2,5,i+1)
    plt.axis("off")
    plt.imshow(test_x[num],cmap="gray")
    demo = tf.reshape(X_test[num],(1,28,28,1))
    y_pred = np.argmax(model.predict(demo))
    plt.title("y="+ str(test_y[num])+"\ny_pred"+str(y_pred))

plt.show()

② 结果记录
实验12 卷积神经网络

实验12 卷积神经网络

③ 实验总结
正确率98.88%,能够较好地预测实验结果。

题目二:

  使用Keras构建和训练卷积神经网络,实现对Cifar10数据集的识别,并测试模型性能,以恰当的形式展现训练过程和结果。
要求:
  ⑴编写代码,构建卷积神经网络,实现上述功能。
  ⑵调整超参数,记录实验过程和结果。
  调整卷积神经网络的结构和训练参数,找出最佳的结构和超参数,记录和分析实验结果;
  ⑶保存最佳模型,计算各层参数个数和模型总参数;
  ⑷分析和总结:
  你都调整了哪些参数?结合训练过程,说明各个超参数对模型性能的影响;
① 代码

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
import tensorflow as tf
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import tensorflow.keras.layers as ly
plt.rcParams['font.family'] = "SimHei"
plt.rcParams["axes.unicode_minus"] = False

#加载数据集
cifar10 = tf.keras.datasets.cifar10
(x_train,y_train),(x_test,y_test) = cifar10.load_data()

#数据预处理
x_train,x_test = tf.cast(x_train,tf.float32) / 255.0,tf.cast(x_test,tf.float32) / 255.0
y_train,y_test = tf.cast(y_train,tf.int32),tf.cast(y_test,tf.int32)

#建立模型
model = tf.keras.Sequential([
    #特征提取
    ly.Conv2D(16,kernel_size=(3,3),padding="same",activation=tf.nn.relu,input_shape=x_train.shape[1:]),
    ly.Conv2D(16,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    ly.MaxPool2D(pool_size=(2,2)),
    ly.Dropout(0.2),

    ly.Conv2D(32,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    ly.Conv2D(32,kernel_size=(3,3),padding="same",activation=tf.nn.relu),
    ly.MaxPool2D(pool_size=(2,2)),
    ly.Dropout(0.2),

    #分类识别
    ly.Flatten(),
    ly.Dropout(0.2),
    ly.Dense(128,activation="relu"),
    ly.Dropout(0.2),
    ly.Dense(10,activation="softmax")
])

#查看摘要
print(model.summary())
#配置训练方法
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['sparse_categorical_accuracy'])
#训练模型
h = model.fit(x_train,y_train,batch_size=64,epochs=5,validation_split=0.2)
#评估模型
print(model.evaluate(x_test,y_test,verbose=2))

#结果可视化
print(h.history)
loss = h.history['loss']
acc = h.history['sparse_categorical_accuracy']
val_loss = h.history['val_loss']
val_acc = h.history['val_sparse_categorical_accuracy']
plt.figure(figsize=(10,3))
plt.subplot(121)
plt.plot(loss,color = 'b',label = "train")
plt.plot(val_loss,color = 'r',label = 'test')
plt.ylabel('loss')
plt.legend()
plt.subplot(122)
plt.plot(acc,color = 'b',label = "train")
plt.plot(val_acc,color = 'r',label = 'test')
plt.ylabel('Accuracy')
plt.legend()

#预测数据
plt.figure()
for i in range(10):
    num = np.random.randint(1,10000)
    plt.subplot(2,5,i+1)
    plt.axis("off")
    plt.imshow(x_test[num],cmap="gray")
    demo = tf.reshape(x_test[num],(1,32,32,3))
    y_pred = np.argmax(model.predict(demo))
    plt.title("标签值"+str((y_test.numpy())[num,0])+'\n预测值'+str(y_pred))
plt.show()
model.save("CIFAR10_CNN_weigts.h5")
model.load_weights("CIFAR10_CNN_weights.h5")

② 结果记录

实验12 卷积神经网络

实验12 卷积神经网络
③ 实验总结

实验12 卷积神经网络

实验12 卷积神经网络

4. 实验小结&讨论题

①和全连接网络相比,卷积神经网络有什么特点?卷积层和池化层的主要作用什么?是否卷积层和池化层的数量越多,模型的效果就越好?卷积核的大小对卷积神经网络性能有何影响?
卷积层:提取特征。“不全连接,参数共享”的特点大大降低了网络参数,保证了网络的稀疏性,防止过拟合。之所以可以“参数共享”,是因为样本存在局部相关的特性。
池化层:有MaxPool和AveragePool等。其中MaxPool应用广泛。因为经过MaxPool可以减小卷积核的尺寸,同时又可以保留相应特征,所以主要用来降维。
全连接层:在全连接的过程中丢失位置信息,可以理解为降低了学习过程中的参数敏感度;很多分类问题需要通过softmax层进行输出;进行非线性变换等等。
②比较题目一和题目二,所使用的网络结构有什么异同?比请对二者进行比较并分析原因。
相同点:都使用了卷积层和池化层,激活函数;
不同点:#数据预处理不同,数据格式也不同。x_train,x_test = tf.cast(x_train,tf.float32)/255.0, tf.cast(x_test,tf.float32)/255.0
③卷积神经网络的优化方式有哪些?在题目一和题目二中,你使用了哪些优化方式,优化的效果如何?请对实验结果进行对比和分析。
一般来说,提高泛化能力的方法主要有以下几个:
正则化
增加神经网络层数
使用正确的代价函数
④ 卷积神经网络中的超参数有哪些?结合题目一和题目二,说明它们对模型性能的影响。
每一层的卷积是的输出大小编程n-5+1,每卷积一次,宽高的维度就会减少4,使用更大的卷积层会更快的减少输出的大小,在输入的宽和高 周围加入额外的行/列,控制输出形状的减少量,填充Ph行和Pw列,输出形状为:(Nh-Kh+Ph+1)*(Nw-Kw+Pw+1),我们通常取Ph=Kh-1,Pw=Kw-1 这样保证了我们的输入和输出是一致的文章来源地址https://www.toymoban.com/news/detail-474516.html

到了这里,关于实验12 卷积神经网络的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【人工智能】— 深度神经网络、卷积神经网络(CNN)、多卷积核、全连接、池化

    Pre-training + Fine-tuning Pre-training(预训练) : 监督逐层训练是多隐层网络训练的有效手段, 每次训练一层隐层结点, 训练时将上一层隐层结点的输出作为输入, 而本层隐结点的输出作为下一层隐结点的输入, 这称为”预训练”. Fine-tuning(微调) : 在预训练全部完成后, 再对整个网络进行

    2024年02月10日
    浏览(48)
  • 深度学习|卷积神经网络

    卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习神经网络结构,主要用于 图像识别 、 计算机视觉 等领域。该结构在处理图像等高维数据时表现出色,因为它具有共享权重和局部感知的特点,一方面减少了权值的数量使得网络易于优化,另一方面降低了模型的复

    2024年02月11日
    浏览(43)
  • 深度学习,卷积神经网络

      CV领域发展 CV领域是计算机视觉(Computer Vision)领域的简称。 计算机视觉是指利用计算机模拟人类视觉系统的科学,让计算机具有类似于人类在观察外界的视觉、图像的能力,包括图像处理、图像分析、图像理解等。 计算机视觉领域发展有以下特点: 视觉系统的出现和不

    2024年02月15日
    浏览(55)
  • 深度卷积神经网络

    目录 1.AlexNet 2. 代码实现 (1)特征提取 (2)选择核函数来计算相关性:怎么判断在高维空间里面两个点是如何相关的,如果是线性模型就是做内积。 (3)凸优化问题 (4)漂亮的定理 丢弃法的作用就是因为模型太大了,使用它来对模型做正则。Relu相比于sigmoid梯度确实更大,Maxpoolin

    2024年01月16日
    浏览(74)
  • 【深度学习】6-1 卷积神经网络 - 卷积层

    卷积神经网络(Convolutional Neural Network, CNN )。 CNN 被用于图像识别、语音识别等各种场合,在图像识别的比赛中,基于深度学习的方法几乎都以 CNN 为基础。 首先,来看一下 CNN 的网络结构,了解 CNN 的大致框架。CNN 和之前介绍的神经网络一样,可以像乐高积木一样通过组装层

    2024年02月10日
    浏览(48)
  • Python中的深度学习:神经网络与卷积神经网络

    当下,深度学习已经成为人工智能研究和应用领域的关键技术之一。作为一个开源的高级编程语言,Python提供了丰富的工具和库,为深度学习的研究和开发提供了便利。本文将深入探究Python中的深度学习,重点聚焦于神经网络与卷积神经网络的原理和应用。 深度学习是机器学

    2024年02月08日
    浏览(45)
  • 深度卷积神经网络(AlexNet)

     🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】 ​  🖍foreword ✔说

    2023年04月25日
    浏览(37)
  • 基于 Python中的深度学习:神经网络与卷积神经网络

    当下,深度学习已经成为人工智能研究和应用领域的关键技术之一。作为一个开源的高级编程语言,Python提供了丰富的工具和库,为深度学习的研究和开发提供了便利。本文将深入探究Python中的深度学习,重点聚焦于神经网络与卷积神经网络的原理和应用。 深度学习是机器学

    2024年02月07日
    浏览(59)
  • 深度学习算法及卷积神经网络

    传统神经网络 深度学习不适用情况:跨域(股票预测问题),旧历史数据的规律不适合新数据的规律 矩阵计算: 输入数据x[32×32×3]=3072个像素点,展开成一列, 目的:做一个10分类,10组权重参数,得到10个值,属于各个类别的概率 偏置项b,10个值 权重参数W得到:先随机,

    2023年04月08日
    浏览(53)
  • 深度学习——CNN卷积神经网络

    卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习中常用于处理具有网格结构数据的神经网络模型。它在计算机视觉领域广泛应用于图像分类、目标检测、图像生成等任务。 CNN 的核心思想是通过利用局部感知和参数共享来捕捉输入数据的空间结构信息。相比于传统

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包