TensorFlow2.3.1和MNIST数据集相关操作

项目场景:

由于网上对TensorFlow2.3.1的相关操作介绍的很少,即使有大部分都是有错误的,于是我就通过自己的摸索,对此作以总结。


问题描述:

首先是通过tensorflow对MNIST数据集进行下载,网上对此具体的操作是使用以下方法进行下载:

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('MNIST_data',one_hot = True)


原因分析:

因为TensorFlow2.0往后的版本已经更新了很多函数库,比如examples库中没有tutorials函数,如果非要使用可以对此进行下载。我觉得没必要,因为TensorFlow2.3.1中给我们提供了keras库,该库中给我们专门提供了对相关数据集的下载,具体的操作在下方的完整代码中。


解决方案:

首先是对MNIST数据集的可视化显示完整代码:

接下来是对MNIST数据集做的相关训练完整代码:

import tensorflow as tf

#定义超参数
batch_size = 256 #一次训练的样本数量
learning_rate = 0.001 #学习率
iteration_num = 20#迭代次数

#优化器
optimizer = tf.keras.optimizers.Adam(learning_rate=learning_rate)

#模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(256,activation=tf.nn.relu),
    tf.keras.layers.Dense(128,activation=tf.nn.relu),
    tf.keras.layers.Dense(64,activation=tf.nn.relu),
    tf.keras.layers.Dense(32,activation=tf.nn.relu),
    tf.keras.layers.Dense(10)
])

#调试输出summary
model.build(input_shape=[None,28*28])
print(model.summary())

#数据预处理
def pre_processing(x,y):
    """
    :param x:特征值
    :param y: 目标值
    :return: 返回处理好的x,y
    """
    #转换x
    x = tf.cast(x,tf.float32)/255
    x = tf.reshape(x,[-1,784])

    #转换y
    y = tf.cast(y,dtype=tf.int32)
    y = tf.one_hot(y,depth=10)

    return x,y

#获取数据
def get_data():
    """
    :return:返回分批玩的训练集和测试集
    """
    #获取数据
    (X_train,y_train),(X_test,y_test) = tf.keras.datasets.mnist.load_data()

    #分割数据集
    train_db = tf.data.Dataset.from_tensor_slices((X_train,y_train)).shuffle(60000, seed=0)
    train_db = train_db.batch(batch_size).map(pre_processing)

    #分割测试集
    test_db = tf.data.Dataset.from_tensor_slices((X_test,y_test)).shuffle(10000, seed=0)
    test_db = test_db.batch(batch_size).map(pre_processing)

    #返回
    return train_db,test_db

#训练数据
def train(train_db):
    """
    训练数据
    :param train_db:分批的数据集
    :return: 无返回值
    """
    for step,(x,y) in enumerate(train_db):
        with tf.GradientTape() as tape:
            logits = model(x)#获取模型输出结果
            MSE = tf.reduce_mean(tf.losses.MSE(y,logits))#计算MSE
            Cross_Entropy = tf.losses.categorical_crossentropy(y,logits,from_logits=True)#计算交叉熵
            Cross_Entropy = tf.reduce_sum(Cross_Entropy)

        #计算梯度
        grads = tape.gradient(Cross_Entropy,model.trainable_variables)
        #更新参数
        optimizer.apply_gradients(zip(grads,model.trainable_variables))
        #每100批调试输出一次误差
        if step%100 == 0:
            print("step:",step,"Cross_Entropy:",float(Cross_Entropy),"MSE:",float(MSE))

#测试模型
def test(epoch,test_db):
    """
    测试模型
    :param epoch:轮数
    :param test_db: 分批的测试集
    :return: 无返回值
    """
    total_correct = 0#正确数
    total_num =0 #总数

    for x,y in test_db:
        #获取模型输出结果
        logits = model(x)
        #预测结果
        pred = tf.argmax(logits,axis=1)
        #从one_hot编码变回来
        y = tf.argmax(y,axis=1)
        #计算准确数
        correct = tf.equal(pred,y)
        correct = tf.reduce_sum(tf.cast(correct,dtype=tf.int32))
        #添加正确数和总数
        total_correct += int(correct)
        total_num += x.shape[0]
    #计算准确率
    accuracy = total_correct/total_num
    #调试输出
    print("epoch:",epoch,"Accuracy:",accuracy*100,"%")

def main():
    """
    主函数
    :return:无返回值
    """
    #获取数据
    train_db,test_db = get_data()

    #轮期
    for epoch in range(1,iteration_num):
        train(train_db)
        test(epoch, test_db)
if __name__ == '__main__':
    main()

相关结果如下:

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: TensorFlow 2.3.1对应的Keras是Keras API的一部分,它已经被整合到TensorFlow中。因此,您可以直接使用TensorFlow 2.3.1来使用Keras API。TensorFlow 2.3.1的Keras API提供了一组高级的神经网络层和模型,可以帮助您快速构建和训练深度学习模型。 ### 回答2: TensorFlow 2.3.1是一种开源的机器学习框架,它非常强大,并且支持各种各样的机器学习模型的构建和训练。它是由Google开发的,就是它可以轻松处理大数据集和复杂的机器学习算法,它旨在提供一个高效、易用和可扩展的解决方案。 TensorFlow 2.3.1通过与Keras紧密集成来实现神经网络的训练和推理。Keras是一种高级API,它可以以简单直接的方式定义神经网络,使得编写和调试模型变得非常容易。在TensorFlow 2.3.1中,Keras已经成为官方标准API,它使用标准的TensorFlow张量作为输入和输出,同时具有自动微分、基于图形的计算和实时数据增强等功能。 Keras在TensorFlow 2.3.1中的实现提供了非常快速和灵活的模型定义和训练。Keras提供了许多常用层的实现,如卷积层、池化层、全连接层等。此外,Keras还提供了许多损失函数、优化器和度量标准等工具,使得模型训练变得更加容易。 TensorFlow 2.3.1中的Keras还支持分布式训练,这意味着用户可以利用多个GPU或多个计算机来加速模型训练。此外,Keras还提供了许多有用的工具和可视化功能,如TensorBoard,它可以帮助用户对模型的性能进行监控和调试。 总之,在TensorFlow 2.3.1中,Keras提供了一种方便、高效和易用的方法来定义和训练神经网络模型。Keras的强大功能,加上TensorFlow的高性能和可扩展性,使得TensorFlow 2.3.1成为一种非常流行和有用的机器学习框架。 ### 回答3: TensorFlow 2.3.1是谷歌开源的一款深度学习框架,是TensorFlow的最新版本TensorFlow 2.x的一个主要改变是将Keras框架整合进TensorFlow中,作为TensorFlow的默认框架,因此,TensorFlow 2.3.1也是与Keras密不可分的。 Keras是一个高度模块化的、对使用者友好的、高度可扩展的深度学习框架。早在TensorFlow 1.x的时代,Keras就被作为TensorFlow的高层API使用,并异彩纷呈。在TensorFlow 2.0之后,Keras更是作为TensorFlow的默认框架出现了,这意味着我们可以直接在TensorFlow的应用程序中使用Keras的所有功能和API,并享受更好的用户体验和更高效的开发速度。 在TensorFlow 2.3.1中,我们可以使用Keras的高级API,如序列模型、函数式API等等。 序列模型是基本的线性层堆栈,即多个全连接层按照顺序堆叠在一起,可以通过简单的语法来创建。而函数式API可以构建更加复杂的模型,如具有多重输入或输出的模型,以及共享层或多层的模型,可以通过构造函数式API来构建模型。 TensorFlow 2.3.1中的Keras还可以使用不同的优化器、损失函数和指标,并可以很容易地使用自定义的方法。此外,TensorFlow 2.3.1支持训练过程中的自动微分功能,这意味着我们可以自动计算梯度,避免手动计算梯度的复杂性。 总之,TensorFlow 2.3.1和Keras是分不开的,它提供了一个高可定制的、用户友好的深度学习平台,让开发者能够更加高效地构建和训练深度学习模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Caoyy686868

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值