tensorflow搭建卷積神經網絡非常簡單,我們使用卷積神經網絡對fashion mnist數據集進行圖片分類,首先導包:
import tensorflow as tf from tensorflow import keras import matplotlib.pyplot as plt import numpy as np
導入數據集:
(train_image,train_label),(test_image,test_label)=tf.keras.datasets.fashion_mnist.load_data()
查看圖片的shape維度:
train_image.shape
輸出:
(60000, 28, 28)
由於我們卷積神經網絡需要的是四維的數據,也就是一共需要有四個維度,分別是(圖片,橫向像素,豎直方向的像素,channel)。
這個數據集里面的圖像均為三維的矩陣,且為黑白圖片,因此channel為1,如果是RGB的彩色圖片的話,channel為3.因此我們把三維的圖片變成4維的圖片,利用numpy即可:
train_image=np.expand_dims(train_image,-1)
test_image=np.expand_dims(test_image,-1)
然后開始搭建卷積神經網絡,我試了試自己的這個模型,做出來的結果甚至比Yun lekun提出的lenet5神經網絡更好。搭建神經網絡的架構如下:
model.add(tf.keras.layers.Conv2D(32,(3,3), input_shape=train_image.shape[1:], activation="relu", padding="same")) #添加maxpooling層是因為在之后同樣的卷積核能夠提取的特征更多,增大“感受野” model.add(tf.keras.layers.MaxPool2D()) model.add(tf.keras.layers.Conv2D(64,(3,3),activation="relu")) model.add(tf.keras.layers.GlobalAveragePooling2D()) model.add(tf.keras.layers.Dense(10,activation='softmax'))
編譯模型:
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001), loss="sparse_categorical_crossentropy", metrics=['acc'] )
得到圖像的分類結果,並繪制loss函數變化的圖像,用來分析是否模型是否過擬合:
plt.plot(history.epoch,history.history.get('loss'),label="loss") plt.plot(history.epoch,history.history.get('val_loss'),label="val_loss") plt.legend()
得解。