Tensorflow2.0學習(2)---線性回歸和分類


來自《TensorFlow深度學習》書籍

一、線性回歸

model = tf.keras.Sequential()   #序列模型,在此基礎上搭網絡

model.add(tf.keras.layers.Dense(1,input_shape = (1,)))   #全連接層

model.summary()

 

 

二、分類

 

import os
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers, optimizers, datasets

加載數據

x的大小(60000,28,28),60000個樣本,每個樣本由28行、28列構成,數值大小為【0,255】

y大小為(60000),代表標簽數字,0~9

 

 

#load_data()函數返回兩個元祖(tuple)對象,第一個是訓練集,第二個是測試集。
(x, y) , (x_val, y_val) = datasets.mnist.load_data()

x = 2 * tf.convert_to_tensor(x, dtype=tf.float32) / 255. - 1
y = tf.convert_to_tensor(y, dtype=tf.int32)   #轉換成整形張量

print(x.shape, y.shape)
train_dataset = tf.data.Dataset.from_tensor_slices((x,y))   #構建數據集對象
train_dataset = train_dataset.batch(512)    #批量訓練

模型

 

model = keras.Sequential([
    layers.Dense(256, activation = 'relu'),  #隱藏層1
    layers.Dense(128, activation = 'relu'),  #隱藏層2
    layers.Dense(10)  #輸出層,輸出節點數為10
])

訓練

with tf.GradientTape() as tape:   #構建梯度記錄環境
    x = tf.reshape(x, (-1,28*28))   #打平操作,[b,28,28] => [b,284]
    out = model(x)   #計算輸出預測結果 [b,784] => [b ,10]
    y_onehot = tf.one_hot(y,depth=10)  #[b] => [b,10]
    
    loss = tf.square(out - y_onehot)  #計算差的平方和, [b,10]
    loss = tf.reduce_sum(loss) / x.shape[0]   #計算每個樣本的平均誤差, [b]
    
    #自動求導函數求出所有參數的梯度信息,計算梯度w1, w2, w3, b1 ,b2 , b3
    grads = tape.gradient(loss, model.trainable_variables)
    optimizer=optimizers.SGD(learning_rate=0.001)
    #更新網絡參數,w '= w - lr * grad
    optimizer.apply_gradients(zip(grads,model.trainable_variables))

 


免責聲明!

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



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