tensorflow2.0——鳶尾花分類實操(神經網絡偽代碼)


一、實操

  下面進行的模型訓練為偽代碼,一般用tensorflow不會用到這種方式來訓練模型,這個只是用來作為對上一篇常用函數的使用,方便熟悉代碼以及訓練時梯度是如何計算的。

import tensorflow as tf
from sklearn.datasets import load_iris

# 讀取鳶尾花數據
iris_data = load_iris()
x = tf.constant(iris_data.data)
y = tf.constant(iris_data.target)

x=tf.cast(x,tf.float32)
y=tf.cast(y,y.dtype)

y = tf.one_hot(y, 3)  # 對y進行獨熱編碼

# 構建數據集,分為3批次,每個批次大小為50
dataset = tf.data.Dataset.from_tensor_slices((x, y)).shuffle(30).batch(50)

# 構建神經網絡的全連接層4*3的結構,詳情如下:輸入為x的4個特征值,無激活函數;輸出層為3,softmax激活函數
# 輸入層權重、偏倚
w = tf.Variable(tf.ones([4, 3]))
b = tf.Variable(tf.ones([1,3]))

# 訓練設定迭代5代,每代3個批次,學習率為0.1
epoch = 5
learn_rate = 0.1

for epoch_i in range(epoch):
    for step, (x_batch, y_batch) in enumerate(dataset):
        with tf.GradientTape(persistent=True) as tape:
            a = tf.matmul(x_batch,w) + b  # 激活前的值
            y_pre = tf.nn.softmax(a)  # softmax激活函數后的輸出
            loss = tf.reduce_mean(tf.square(y_pre - y_batch))  # 均方誤差
        grads = tape.gradient(loss, [w, b])  # 計算梯度
        w.assign_sub(learn_rate * grads[0])  # 更新權重
        b.assign_sub(learn_rate * grads[1])  # 更新權重

        print('第%d代,第%d批次,loss=%.5f'%(epoch_i+1,step+1,loss))

輸出結果:

第1代,第1批次,loss=0.22222
第1代,第2批次,loss=0.24286
第1代,第3批次,loss=0.27031
第2代,第1批次,loss=0.26356
第2代,第2批次,loss=0.20968
第2代,第3批次,loss=0.27439
第3代,第1批次,loss=0.25802
第3代,第2批次,loss=0.23685
第3代,第3批次,loss=0.20936
第4代,第1批次,loss=0.27304
第4代,第2批次,loss=0.21698
第4代,第3批次,loss=0.19768
第5代,第1批次,loss=0.25066
第5代,第2批次,loss=0.22764
第5代,第3批次,loss=0.19781

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM