第三章 分类问题 @龙良曲 tensorflow

数据集:MNIST,包含0~9共10种数字的手写图片。每种数字7000张,共70000张,这里60000张训练,10000张测试。

建立的网络结构:

 重复堆叠多次变换以增加其表达能力(逼近复杂分布的能力):

relu是激活函数,将线性模型转换为非线性模型:

 代码:


import tensorflow as tf
#导入tf子库
from tensorflow.keras import layers,optimizers,datasets,Sequential,metrics


#设置gpu使用方式
#获取gpu列表
gpus=tf.config.experimental.list_physical_devices('GPU')
if gpus:
    try:
        #设置gpu为增长式占用
        for gpu in gpus:
            tf.config.experimental.set_memory_growth(gpu,True)
    except RuntimeError as e:
        #打印异常
        print(e)



(xs,ys),_=datasets.mnist.load_data()#加载mnist数据集  _表示没有测试集 只用60k训练集
print('datasets:',xs.shape,ys.shape,xs.min(),xs.max())
batch_size=32#批尺寸,一次选择32张
xs=tf.convert_to_tensor(xs,dtype=tf.float32)/255.#转换为浮点张量并缩放到-1~1
db=tf.data.Dataset.from_tensor_slices((xs,ys))#对数据切片
db=db.batch(batch_size).repeat(30)#迭代30次



#用Sequential建立3层神经网络模型
model=Sequential([
    #3个非线性层的嵌套模型
    layers.Dense(256,activation='relu'),#隐藏层1,relu为非线性函数
    layers.Dense(128,activation='relu'),#隐藏层2
    layers.Dense(10)])#输出层,输出节点为10
model.build(input_shape=(4,28*28))
model.summary()#显示神经网络架构
optimizer=optimizers.SGD(learning_rate=0.001)
acc_meter=metrics.Accuracy()

for step,(x,y) in enumerate(db):

    with tf.GradientTape() as tape:#构建梯度记录环境
        #打平操作[b,28,28]->[b,784]
        x=tf.reshape(x,(-1,28*28))
        #step1,得到模型输出 output [b,784]->[b,10]
        out=model(x)
        #[b]->[b,10]
        y_onehot=tf.one_hot(y,depth=10)
        #step2
        #计算差的平方和
        loss=tf.square(out-y_onehot)
        #计算每个样本的平均误差
        loss=tf.reduce_sum(loss)/x.shape[0]
    acc_meter.update_state(tf.argmax(out,axis=1),y)
    # step3, 计算参数的梯度w1,w2,w3,b1,b2,b3
    grads = tape.gradient(loss, model.trainable_variables)#作用见下
    # 更新网络参数 w'=w-lr*grad
    optimizer.apply_gradients(zip(grads, model.trainable_variables))
    if step%200==0:
        print(step,'loss:',float(loss),'acc:',acc_meter.result().numpy())
        acc_meter.reset_states()

 tape.gradient():

执行结果:

 from 《TensorFlow深度学习》 龙良曲

 @原作者龙良曲GitHub:GitHub - dragen1860/Deep-Learning-with-TensorFlow-book: 深度学习入门开源书,基于TensorFlow 2.0案例实战。Open source Deep Learning book, based on TensorFlow 2.0 framework. 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值