TF0007、神经网络分类MNIST数据集

本文介绍MNIST手写数字数据集的下载与使用,并通过TensorFlow实现了一个简单的两层神经网络模型,用于识别手写数字,展示了如何加载数据集、构建网络、训练模型及评估准确性。
部署运行你感兴趣的模型镜像

minst数据集下载地址

链接:https://pan.baidu.com/s/1ka0L6MHfeFWiqGOeJjm3Tw 
提取码:nv0g 

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import warnings
warnings.filterwarnings('ignore')
# 载入数据集,我已经把数据集下载到本地
mnist = input_data.read_data_sets(train_dir=r'C:\Users\zx\Desktop\MLCodes\MyAIRoad\MNIST_data',one_hot=True)
Extracting C:\Users\zx\Desktop\MLCodes\MyAIRoad\MNIST_data\train-images-idx3-ubyte.gz
Extracting C:\Users\zx\Desktop\MLCodes\MyAIRoad\MNIST_data\train-labels-idx1-ubyte.gz
Extracting C:\Users\zx\Desktop\MLCodes\MyAIRoad\MNIST_data\t10k-images-idx3-ubyte.gz
Extracting C:\Users\zx\Desktop\MLCodes\MyAIRoad\MNIST_data\t10k-labels-idx1-ubyte.gz
# 批次大小,即每次放多少条数据到网络进行训练
batch_size = 64
# 计算训练集里一共有多少个批次
n_batch = mnist.train.num_examples // batch_size

# 定义两个placeholder
#用来输入训练数据
x = tf.placeholder(tf.float32,[None,784])
#用来输入训练标签
y = tf.placeholder(tf.float32,[None,10])

# 创建的神经网络:784-10-10 输入层784,隐藏层10,输出层10
#1.输入层到隐藏层
W1 = tf.Variable(tf.truncated_normal([784,10]
                                    , stddev=0.1
                                   ))
b1 = tf.Variable(tf.zeros([10])+0.1)
#激活函数使用softmax
l1 = tf.nn.softmax(tf.matmul(x,W1)+b1)

#2.隐藏层到输出层
W2 = tf.Variable(tf.truncated_normal([10,10]
                                     ,stddev=0.1))

b2 = tf.Variable(tf.zeros([10])+0.1)
prediction = tf.nn.softmax(tf.matmul(l1,W2)+b2)


# 二次代价函数
loss = tf.losses.mean_squared_error(y, prediction)
#设置学习率
lr = 0.3
# 使用梯度下降法
train = tf.train.GradientDescentOptimizer(lr).minimize(loss)

# 结果存放在一个布尔型列表中 tf.argmax(y,1) 取y第1个维度中最大值
correct_prediction = tf.equal(tf.argmax(y,1),tf.argmax(prediction,1))
# 求准确率,cast 把布尔值转换成0 1
accuracy = tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

with tf.Session() as sess:
    # 变量初始化
    sess.run(tf.global_variables_initializer())
    # 周期epoch:所有数据训练一次,就是一个周期
    for epoch in range(200):
        for batch in range(n_batch):
            # 获取一个批次的数据和标签
            batch_xs,batch_ys = mnist.train.next_batch(batch_size)
            sess.run(train,feed_dict={x:batch_xs,y:batch_ys})
        # 每训练一个周期做一次测试
        acc = sess.run(accuracy,feed_dict={x:mnist.test.images,y:mnist.test.labels})
        #每训练20次打印一次
        if epoch%20==0:
            print("epoch " + str(epoch+1) + ",Testing Accuracy " + str(acc))
epoch 1,Testing Accuracy 0.1867
epoch 21,Testing Accuracy 0.4955
epoch 41,Testing Accuracy 0.624
epoch 61,Testing Accuracy 0.7113
epoch 81,Testing Accuracy 0.7516
epoch 101,Testing Accuracy 0.781
epoch 121,Testing Accuracy 0.8003
epoch 141,Testing Accuracy 0.8072
epoch 161,Testing Accuracy 0.8139
epoch 181,Testing Accuracy 0.8182

 

 

 

 

 

您可能感兴趣的与本文相关的镜像

TensorFlow-v2.15

TensorFlow-v2.15

TensorFlow

TensorFlow 是由Google Brain 团队开发的开源机器学习框架,广泛应用于深度学习研究和生产环境。 它提供了一个灵活的平台,用于构建和训练各种机器学习模型

BP(Back Propagation)神经网络是一种常用的前馈神经网络,主要用于分类和回归问题。MNIST数据集是一个手写数字识别的经典数据集,包含60000张训练图片和10000张测试图片,每张图片是28x28像素的灰度图,标注为0-9的数字。 使用BP神经网络MNIST数据集进行分类的步骤如下: 1. **数据预处理**: - 将图像数据归一化:将像素值从[0, 255]范围缩放到[0, 1]范围。 - 将标签进行独热编码(One-Hot Encoding),即将每个标签转换为一个10维的向量,例如标签3转换为[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]。 2. **构建BP神经网络**: - 输入层:输入层的节点数与图像的像素数相同,即28x28=784。 - 隐藏层:可以设置一个或多个隐藏层,每层的节点数可以根据需要调整。 - 输出层:输出层的节点数为10,对应于10个类别。 3. **训练网络**: - 初始化权重和偏置。 - 前向传播:计算每层的输出。 - 计算损失:通常使用交叉熵损失函数。 - 反向传播:计算损失函数对每个参数的梯度,并更新权重和偏置。 4. **评估模型**: - 使用测试集评估模型的准确率。 以下是一个简单的Python代码示例,使用TensorFlow和Keras库来实现BP神经网络MNIST数据集分类: ```python import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Flatten from tensorflow.keras.utils import to_categorical # 加载数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 数据预处理 x_train = x_train.reshape((x_train.shape[0], 28 * 28)) / 255.0 x_test = x_test.reshape((x_test.shape[0], 28 * 28)) / 255.0 y_train = to_categorical(y_train, 10) y_test = to_categorical(y_test, 10) # 构建BP神经网络 model = Sequential() model.add(Flatten(input_shape=(28 * 28,))) model.add(Dense(128, activation='relu')) model.add(Dense(10, activation='softmax')) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, epochs=10, batch_size=32, validation_split=0.1) # 评估模型 test_loss, test_accuracy = model.evaluate(x_test, y_test) print(f"Test accuracy: {test_accuracy}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值