tensorflow學習——02Fashion MNIST資料集神經網路訓練
阿新 • • 發佈:2021-10-13
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() #觀察構造的網路模型
其中784是28*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])生命不息,程式碼不止