Tensorflow2.0笔记 - 不使用layer方式,简单的MNIST训练

这篇具有很好参考价值的文章主要介绍了Tensorflow2.0笔记 - 不使用layer方式,简单的MNIST训练。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        本笔记不使用layer相关API,搭建一个三层的神经网络来训练MNIST数据集。

        前向传播和梯度更新都使用最基础的tensorflow API来做。

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import datasets
import numpy as np

def load_mnist():
    path = r'./mnist.npz' #放置mnist.py的目录。注意斜杠
    f = np.load(path)
    x_train, y_train = f['x_train'], f['y_train']
    x_test, y_test = f['x_test'], f['y_test']
    f.close()
    return (x_train, y_train), (x_test, y_test)

#加载mnist数据集
#X_train: [60000, 28, 28] 图片
#Y_train: [60000] 标签
#mnist数据集下载:https://blog.csdn.net/charles_neil/article/details/107851880
#                https://www.zhihu.com/question/56773355
(X_train,Y_train),(X_test,Y_test) = load_mnist()

#转换为tensor
#图片数据值转换到0-1
x = tf.convert_to_tensor(X_train, dtype=tf.float32) / 255.
y = tf.convert_to_tensor(Y_train, dtype=tf.int32)
print(x.shape,y.shape)
print(tf.reduce_min(x), tf.reduce_max(x))
print(tf.reduce_min(y), tf.reduce_max(y))

#数据集切分为多个batch
train_db = tf.data.Dataset.from_tensor_slices((x,y)).batch(128)
train_iter = iter(train_db)

sample = next(train_iter)
print(sample[0].shape, sample[1].shape)


#学习率
lr = 0.1
#用三个神经元,[b:784] => [b,256] => [b,128] => [b,10]
w1 = tf.Variable(tf.random.truncated_normal([784,256], stddev=0.1))
b1 = tf.Variable(tf.zeros([256]))
w2 = tf.Variable(tf.random.truncated_normal([256,128], stddev=0.1))
b2 = tf.Variable(tf.zeros([128]))
w3 = tf.Variable(tf.random.truncated_normal([128,10], stddev=0.1))
b3 = tf.Variable(tf.zeros([10]))

for epoch in range(10):
    print("[==================Epoch ", epoch, "========================]")
    for step, (x,y) in enumerate(train_db):
        x = tf.reshape(x, [-1, 28*28])
        #对标签进行onehot编码
        y_onehot = tf.one_hot(y, depth=10)
    
        with tf.GradientTape() as tape:
            #第一层,输入x [128,784]
            #x@w + b: [batch, 784] [784,256] + [256] => [batch,256]
            h1 = x@w1 + b1
            h1 = tf.nn.relu(h1)
            #第二层:[batch, 256] => [batch, 128]
            h2 = h1@w2 + b2
            h2 = tf.nn.relu(h2)
            #输出层:[batch,128] => [batch,10]
            out = h2@w3 + b3
        
            #计算损失
            #使用MSE: mean(sum(y - out)^2)
            loss = tf.reduce_mean(tf.square(y_onehot - out))
        #计算梯度
        grads = tape.gradient(loss, [w1,b1,w2,b2,w3,b3])
        #更新w和b: w = w - lr * w_grad
        w1.assign_sub(lr * grads[0])
        b1.assign_sub(lr * grads[1])
        w2.assign_sub(lr * grads[2])
        b2.assign_sub(lr * grads[3])
        w3.assign_sub(lr * grads[4])
        b3.assign_sub(lr * grads[5])
        
        if (step % 100 == 0):
            print("Batch:", step, "loss:", float(loss))

        运行结果:

Tensorflow2.0笔记 - 不使用layer方式,简单的MNIST训练,TensorFlow2.0,tensorflow,笔记,人工智能,python,深度学习Tensorflow2.0笔记 - 不使用layer方式,简单的MNIST训练,TensorFlow2.0,tensorflow,笔记,人工智能,python,深度学习文章来源地址https://www.toymoban.com/news/detail-807017.html

到了这里,关于Tensorflow2.0笔记 - 不使用layer方式,简单的MNIST训练的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Tensorflow2.0笔记 - tensor的合并和分割

    Tensorflow2.0笔记 - tensor的合并和分割

            主要记录concat,stack,unstack和split相关操作的作用         运行结果:

    2024年01月23日
    浏览(6)
  • Tensorflow2.0笔记 - Tensor的数据索引和切片

    Tensorflow2.0笔记 - Tensor的数据索引和切片

            主要涉及的了基础下标索引\\\"[]\\\",逗号\\\",\\\",冒号\\\":\\\",省略号\\\"...\\\"操作,以及gather,gather_nd和boolean_mask的相关使用方法。 运行结果:   ....

    2024年01月23日
    浏览(6)
  • 【优化算法】使用遗传算法优化MLP神经网络参数(TensorFlow2)

    【优化算法】使用遗传算法优化MLP神经网络参数(TensorFlow2)

    使用启发式优化算法 遗传算法 对多层感知机中中间层神经个数进行优化,以提高模型的准确率。 待优化的模型: 基于TensorFlow2实现的Mnist手写数字识别多层感知机MLP 设置随机树种子,避免相同结构的神经网络其结果不同的影响。 准确率为96.7% 使用scikit-opt提供的遗传算法库

    2023年04月13日
    浏览(39)
  • tensorflow2基础

    TensorFlow 包含以下特性: 训练流程 数据的处理  :使用 tf.data 和 TFRecord 可以高效地构建和预处理数据集,构建训练数据流。同时可以使用 TensorFlow Datasets 快速载入常用的公开数据集。 模型的建立与调试  :使用即时执行模式和著名的神经网络高层 API 框架 Keras,结合可视化

    2024年02月11日
    浏览(10)
  • tensorflow2 模型建立与训练

    模型的构建:  tf.keras.Model  和  tf.keras.layers 模型的损失函数:  tf.keras.losses 模型的优化器:  tf.keras.optimizer 模型的评估:  tf.keras.metrics Keras 有两个重要的概念:  模型(Model)  和  层(Layer)  。层将各种计算流程和变量进行了封装(例如基本的全连接层,CNN 的卷积层

    2024年02月10日
    浏览(15)
  • tensorflow2模型保存和恢复

    tensorflow2模型保存和恢复

    有两种方法可以保存模型: ·使用检查点,一种简单的在硬盘上保存变量的方法 ·使用SavedModel,模型结构及检查点 检查点不包含任何关于模型自身的描述:它们只是一种简单的存储参数并能让开发者正确恢复它的方法。 SavedModel格式在保存参数值的基础上加上了计算过程的序

    2024年02月11日
    浏览(9)
  • TensorFlow2.0教程1-Eager

    2023年11月06日
    浏览(12)
  • Tensorflow2——Eager模式简介以及运用

    TensorFlow的eager执行模式是一个重要的编程环境,它能立即评估运算,而无须构建图:运算会实时返回值,而不是构建一个计算图后再运行。这使得使用TensorFlow和调试模型更简单,并且可以减少很多样板代码。 eager执行模式对研究和实验来说是一个灵活的机器学习平台,有下列

    2024年02月11日
    浏览(10)
  • 深入浅出TensorFlow2函数——tf.exp

    分类目录:《深入浅出TensorFlow2函数》总目录 相关文章: · 深入浅出TensorFlow2函数——tf.exp · 深入浅出TensorFlow2函数——tf.math.exp · 深入浅出Pytorch函数——torch.exp · 深入浅出PaddlePaddle函数——paddle.exp 按元素计算 x x x 的指数 y = e x y=e^x y = e x 。 语法 参数 x :[ tf.Tensor ] 必须

    2024年02月12日
    浏览(9)
  • 深入浅出TensorFlow2函数——tf.rank

    分类目录:《深入浅出TensorFlow2函数》总目录 语法 参数 input : tf.Tensor 或 tf.SparseTensor name :[可选] 操作的名称 返回值 张量 input 的维度,是一个 int32 类型的张量 实例 输入: 输出: 函数实现

    2024年02月12日
    浏览(9)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包