tensorflow 2.0 学习 (十一)卷积神经网络 (一)MNIST数据集训练与预测 LeNet-5网络

网络结构如下:

代码如下:

 1 # encoding: utf-8
 2
 3 import tensorflow as tf
 4 from tensorflow import keras
 5 from tensorflow.keras import layers, Sequential, losses, optimizers, datasets
 6 import matplotlib.pyplot as plt
 7
 8 Epoch = 30
 9 path = r‘G:\2019\python\mnist.npz‘
10 (x, y), (x_val, y_val) = tf.keras.datasets.mnist.load_data(path)  # 60000 and 10000
11 print(‘datasets:‘, x.shape, y.shape, x.min(), x.max())
12
13 x = tf.convert_to_tensor(x, dtype = tf.float32)  #/255.    #0:1  ;   -1:1(不适合训练,准确度不高)
14 # x = tf.reshape(x, [-1, 28*28])
15 y = tf.convert_to_tensor(y, dtype=tf.int32)
16 # y = tf.one_hot(y, depth=10)
17 #将60000组训练数据切分为600组,每组100个数据
18 train_db = tf.data.Dataset.from_tensor_slices((x, y))
19 train_db = train_db.shuffle(60000)      #尽量与样本空间一样大
20 train_db = train_db.batch(100)          #128
21
22 x_val = tf.cast(x_val, dtype=tf.float32)
23 y_val = tf.cast(y_val, dtype=tf.int32)
24 test_db = tf.data.Dataset.from_tensor_slices((x_val, y_val))
25 test_db = test_db.shuffle(10000)
26 test_db = test_db.batch(100)        #128
27
28 network = Sequential([
29     layers.Conv2D(6, kernel_size=3, strides=1),  # 6个卷积核
30     layers.MaxPooling2D(pool_size=2, strides=2),  # 池化层,高宽各减半
31     layers.ReLU(),
32     layers.Conv2D(16, kernel_size=3, strides=1),  # 16个卷积核
33     layers.MaxPooling2D(pool_size=2, strides=2),  # 池化层,高宽各减半
34     layers.ReLU(),
35     layers.Flatten(),
36
37     layers.Dense(120, activation=‘relu‘),
38     layers.Dense(84, activation=‘relu‘),
39     layers.Dense(10)
40 ])
41 network.build(input_shape=(4, 28, 28, 1))
42 network.summary()
43 optimizer = tf.keras.optimizers.RMSprop(0.001)              # 创建优化器,指定学习率
44 criteon = losses.CategoricalCrossentropy(from_logits=True)
45
46 # 保存训练和测试过程中的误差情况
47 train_tot_loss = []
48 test_tot_loss = []
49
50
51 for step in range(Epoch):
52     cor, tot = 0, 0
53     for x, y in train_db:
54         with tf.GradientTape() as tape:  # 构建梯度环境
55             # 插入通道维度 [None,28,28] -> [None,28,28,1]
56             x = tf.expand_dims(x, axis=3)
57             out = network(x)
58             y_true = tf.one_hot(y, 10)
59             loss =criteon(y_true, out)
60
61             out_train = tf.argmax(out, axis=-1)
62             y_train = tf.cast(y, tf.int64)
63             cor += float(tf.reduce_sum(tf.cast(tf.equal(y_train, out_train), dtype=tf.float32)))
64             tot += x.shape[0]
65
66             grads = tape.gradient(loss, network.trainable_variables)
67             optimizer.apply_gradients(zip(grads, network.trainable_variables))
68     print(‘After %d Epoch‘ % step)
69     print(‘training acc is ‘, cor/tot)
70     train_tot_loss.append(cor/tot)
71
72     correct, total = 0, 0
73     for x, y in test_db:
74         x = tf.expand_dims(x, axis=3)
75         out = network(x)
76         pred = tf.argmax(out, axis=-1)
77         y = tf.cast(y, tf.int64)
78         correct += float(tf.reduce_sum(tf.cast(tf.equal(y, pred), dtype=tf.float32)))
79         total += x.shape[0]
80     print(‘testing acc is : ‘, correct/total)
81     test_tot_loss.append(correct/total)
82
83
84 plt.figure()
85 plt.plot(train_tot_loss, ‘b‘, label=‘train‘)
86 plt.plot(test_tot_loss, ‘r‘, label=‘test‘)
87 plt.xlabel(‘Epoch‘)
88 plt.ylabel(‘ACC‘)
89 plt.legend()
90 plt.savefig(‘exam8.2_train_test_CNN1.png‘)
91 plt.show()

训练和测试结果如下:

原文地址:https://www.cnblogs.com/heze/p/12248251.html

时间: 2024-10-03 03:47:05

tensorflow 2.0 学习 (十一)卷积神经网络 (一)MNIST数据集训练与预测 LeNet-5网络的相关文章

Tensorflow学习教程------利用卷积神经网络对mnist数据集进行分类_训练模型

原理就不多讲了,直接上代码,有详细注释. #coding:utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data',one_hot=True) #每个批次的大小 batch_size = 100 n_batch = mnist.train._num_examples // batch_

Tensorflow框架初尝试————搭建卷积神经网络做MNIST问题

Tensorflow是一个非常好用的deep learning框架 学完了cs231n,大概就可以写一个CNN做一下MNIST了 tensorflow具体原理可以参见它的官方文档 然后CNN的原理可以直接学习cs231n的课程. 另外这份代码本地跑得奇慢..估计用gpu会快很多. import loaddata import tensorflow as tf #生成指定大小符合标准差为0.1的正态分布的矩阵 def weight_variable(shape): initial = tf.tru

Tensorflow学习教程------普通神经网络对mnist数据集分类

首先是不含隐层的神经网络, 输入层是784个神经元 输出层是10个神经元 代码如下 #coding:utf-8 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #载入数据集 mnist = input_data.read_data_sets("MNIST_data", one_hot=True) #每个批次的大小 batch_size = 100 #计算一共有多少个批次

从软件工程的角度写机器学习6——深度学习之卷积神经网络(CNN)实现

卷积神经网络(CNN)实现 背景 卷积神经网络广泛用于图像检测,它的实现原理与传统神经网络基本上是一样的,因此将普遍意义的神经网络和卷积神经网络的实现合成一篇. 神经网络实现思路 "扔掉神经元" 尽管所有教程在介绍神经网络时都会把一大堆神经元画出来,并且以输入节点--神经元--输出结点连线,但是,在编程实现时,基于神经元去编程是低效的.典型如这篇经典文章里面的代码: http://blog.csdn.net/zzwu/article/details/575125. 比较合适的方法是将神

deep_learning_LSTM长短期记忆神经网络处理Mnist数据集

1.RNN(Recurrent Neural Network)循环神经网络模型 详见RNN循环神经网络:https://www.cnblogs.com/pinard/p/6509630.html 2.LSTM(Long Short Term Memory)长短期记忆神经网络模型 详见LSTM长短期记忆神经网络:http://www.cnblogs.com/pinard/p/6519110.html 3.LSTM长短期记忆神经网络处理Mnist数据集 1 2 3 4 5 6 7 8 9 10 11

深度学习之卷积神经网络CNN及tensorflow代码实现示例

一.CNN的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的.当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很多,计算速度就会变得很慢,例如一张黑白的 28×28 的手写数字图片,输入层的神经元就有784个,如下图所示: 若在中间只使用一层隐藏层,参数 w 就有 784×15=11760 多个:若输入的是28×28 带有颜色的RGB格式的手写数字图片,输入神经元就有28×28×3=2352 个-- .这很容易看出使用全连接神经网络处理图像中的需要训

深度学习之 TensorFlow(四):卷积神经网络

基础概念: 卷积神经网络(CNN):属于人工神经网络的一种,它的权值共享的网络结构显著降低了模型的复杂度,减少了权值的数量.卷积神经网络不像传统的识别算法一样,需要对数据进行特征提取和数据重建,可以直接将图片作为网络的输入,自动提取特征,并且对图形的变形等具有高度不变形.在语音分析和图像识别领域有重要用途. 卷积:卷积是泛函分析中的一种积分变换的数学方法,通过两个函数 f 和 g 生成第三个函数的一种数学算子,表征函数 f 与 g 经过翻转和平移的重叠部分的面积.设函数  是定义在  上的可测函

深度学习(一) 卷积神经网络CNN

Contents 图像数据集基础 全连接神经网络解决图片问题的弊端(前世) 卷积神经网络的今生 网络结构 卷积操作 池化操作 小结 图像数据集基础 数字图像划分为彩色图像.灰度图像.二值图像和索引图像几种.其中,像素是构成图像的基本单位,例如一张28×28像素的图片,即表示横向有28个像素点,纵向有28个像素点. 最常用的彩色图像和灰度图像: 彩色图像:每个像素由RGB三个分量来表示,即红绿蓝.每个分量介于(0,255).那么,对于一个28×28的彩色图像,便可以由三个表示RGB颜色分量的28×

TensorFlow框架(4)之CNN卷积神经网络详解

1. 卷积神经网络 1.1 多层前馈神经网络 多层前馈神经网络是指在多层的神经网络中,每层神经元与下一层神经元完全互连,神经元之间不存在同层连接,也不存在跨层连接的情况,如图 11所示. 图 11 对于上图中隐藏层的第j个神经元的输出可以表示为: 其中,f是激活函数,bj为每个神经元的偏置. 1.2 卷积神经网络 1.2.1 网络结构 卷积神经网络与多层前馈神经网络的结构不一样,其每层神经元与下一层神经元不是全互连,而是部分连接,即每层神经层中只有部分的神经元与下一层神经元有连接,但是神经元之间