TensorFlow2.3—mnist数据集识别—附python代码

文章代码转载自https://zhuanlan.zhihu.com/p/351180890

接上篇安装tensorflow,安装一下tensorflow 2.3.0版本,安装后确认一下version(因为tensorflow1.0和2.0区别还是蛮大的,import mnist数据集的方法不一样)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  1. 五折交叉
import tensorflow as tf
//载入MINST数据集
mnist = tf.keras.datasets.mnist
//划分训练集和测试集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0


//定义模型结构和模型参数
model = tf.keras.models.Sequential([
    //输入层28*28维矩阵
    tf.keras.layers.Flatten(input_shape=(28, 28)), 
    //128维隐层,使用relu作为激活函数
    tf.keras.layers.Dense(128, activation='relu'), 
    tf.keras.layers.Dropout(0.2),
    //输出层采用softmax模型,处理多分类问题
    tf.keras.layers.Dense(10, activation='softmax')
])
//定义模型的优化方法(adam),损失函数(sparse_categorical_crossentropy)和评估指标(accuracy)
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])


//训练模型,进行5轮迭代更新(epochs=5)
model.fit(x_train, y_train, epochs=5)
//评估模型
model.evaluate(x_test,  y_test, verbose=2)
  1. 多层全连接神经网络mlp
import numpy as np
import tensorflow as tf
import datetime

np.random.seed(0)

(X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data()

num_pixels = X_train.shape[1] * X_train.shape[2]  # 784

#将二维数组拉成一维向量
X_train = X_train.reshape(X_train.shape[0], num_pixels).astype('float32')
X_test = X_test.reshape(X_test.shape[0], num_pixels).astype('float32')

X_train = X_train / 255
X_test = X_test / 255

y_train = tf.keras.utils.to_categorical(y_train)  #转化为独热编码
y_test = tf.keras.utils.to_categorical(y_test)
num_classes = y_test.shape[1]  # 10

#多层全连接神经网络模型
# model = tf.keras.Sequential([
#     tf.keras.layers.Dense(num_pixels, input_shape=(num_pixels,),
#                     kernel_initializer='normal', activation='relu'),
#     tf.keras.layers.Dense(784, kernel_initializer='normal', activation='relu'),
#     tf.keras.layers.Dense(num_classes, kernel_initializer='normal',
#                     activation='softmax')
# ])
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(num_pixels, input_shape=(num_pixels,), kernel_initializer='normal', activation='relu'))
model.add(tf.keras.layers.Dense(784, kernel_initializer='normal', activation='relu'))
model.add(tf.keras.layers.Dense(num_classes, kernel_initializer='normal',  activation='softmax'))


model.summary()

# model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

startdate = datetime.datetime.now()  # 获取当前时间
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=20, batch_size=200, verbose=2)
enddate = datetime.datetime.now()

print("训练用时:" + str(enddate - startdate))
  1. 卷积神经网络CNN
import numpy as np
import tensorflow as tf
import datetime
np.random.seed(0)

(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape(x_train.shape[0],28,28,1).astype('float32')
x_test = x_test.reshape(x_test.shape[0],28,28,1).astype('float32')

x_train = x_train/255
x_test = x_test/255

y_train = tf.keras.utils.to_categorical(y_train)
y_test = tf.keras.utils.to_categorical(y_test)
num_classes = y_test.shape[1]

#CNN
model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(filters=32,kernel_size=(5,5),input_shape=(28,28,1),activation='relu'))
model.add(tf.keras.layers.MaxPool2D(pool_size=(2,2)))
model.add(tf.keras.layers.Dropout(0.2))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.Dense(128,activation='relu'))
model.add(tf.keras.layers.Dense(num_classes,activation='softmax'))

print(model.summary())
print("----------------------------------------------")
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
startDate = datetime.datetime.now()
model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=2,batch_size=200,verbose=2)
endDate = datetime.datetime.now()

print("time:"+str(endDate-startDate))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值