1. 程式人生 > 其它 >tensorflow學習——02Fashion MNIST資料集神經網路訓練

tensorflow學習——02Fashion MNIST資料集神經網路訓練

Fashion MMIST資料集是一個現成的資料集,可以直接用來學習深度學習

其中包括70000張圖片,10個類別,28*28畫素,用於訓練神經元網路

上面是一個神經元示意圖,有3個輸入x1 x2 x3,並且有是三個權重w1 w2 w3, b是他的截距,也是一個常數

神經元就把他的輸入分別乘以權重加起來,並且加上一個常數,得到一個值z,將這個值放入到啟用函式中,函式的輸出就是整個神經元的輸出

Relu啟用函式用於中間層,只有輸入是正數的時候才會有輸出,輸入是負數的時候輸出為0

Softmax函式將輸出壓縮到0-1之間

#載入Fashion MNIST資料集
#第一次執行載入資料集的時候會看到有下載的進度條
import tensorflow as tf from tensorflow import keras fashion_mnist=keras.datasets.fashion_mnist (train_images,train_labels),(test_images,test_labels)=fashion_mnist.load_data() #(訓練的圖片,訓練圖片的標籤),(測試的圖片,測試圖片的標籤)
print(train_images.shape) #測試圖片有60000張,每張圖片是28*28畫素
import matplotlib.pyplot as plt
#如果出現沒有matplotlib這個包,可以直接使用conda install matplotlib命令進行下載
plt.imshow(train_images[0]) #顯示訓練集的第一張圖片
#構建神經元網路模型
#三層
#第一層用於接受輸入,每張圖片都是28*28,所以shape是28,28
#第二層是中間層,有128個神經元,這個數字是自己可以任意修改的
#第三層是輸出層,分類類別有10個,所以有10個神經元
#model=keras.Sequential([
#    keras.layers.Flatten(input_shape(28,28)),
#    keras.layers.Dense(128,activation=tf.nn.relu),
#    keras.layers.Dense(10,activation=tf.nn.softmax)
#]) model=keras.Sequential() #構建網路模型 model.add(keras.layers.Flatten(input_shape=(28,28))) #輸入層 model.add(keras.layers.Dense(128,activation=tf.nn.relu)) #加一箇中間層 model.add(keras.layers.Dense(10,activation=tf.nn.softmax)) #加一個輸出層
model.summary() #觀察構造的網路模型

其中78428*28

100480=(784+1)*128

1290=(128+1)*10

輸入是28*28=784以及一個bias的截距

中間層到輸出層就是128個神經元加一個bias截距

上面這是一個全連線的神經網路

如果想要學習神經網路的理論,可以看下面圖片中的這個資料

自動終止訓練

如果訓練次數過渡會出現過擬合的情況

訓練的loss和測試的loss出現分叉的時候一般就是過擬合

#神經元網路模型並不是訓練次數越多越好

class myCallback(tf.keras.callbacks.Callback):
    def on_epoch_end(self,epoch,logs={}):
        if(logs.get('loss')<0.4): #損失函式的值小於0.4的時候
            print("\nloss is low so cancelling training")
            self.model.stop_training=True  #終止訓練
            
callbacks=myCallback()
mnist=tf.keras.datasets.fashion_mnist
(training_images,training_labels),(test_images,test_labels)=mnist.load_data()
training_images_scaled=training_images/255
test_images_scaled=test_images/255.0
model=tf.keras.models.Sequential([
    tf.keras.layers.Flatten(),
    tf.keras.layers.Dense(512,activation=tf.nn.relu),
    tf.keras.layers.Dense(10,activation=tf.nn.softmax)
])
model.compile(optimizer="adam",loss="sparse_categorical_crossentropy",metrics=['accuracy'])
model.fit(training_images_scaled,training_labels,epochs=5,callbacks=[callbacks])

生命不息,程式碼不止