Keras實現卷積神經網絡


 1 # -*- coding: utf-8 -*-
 2 """
 3 Created on Sun Jan 20 11:25:29 2019
 4 
 5 @author: zhen
 6 """
 7 
 8 import numpy as np
 9 from keras.datasets import mnist
10 from keras.models import Sequential
11 from keras.layers import Dense
12 from keras.layers import Dropout
13 from keras.layers import Flatten
14 from keras.layers.convolutional import Conv2D
15 from keras.layers.convolutional import MaxPooling2D
16 
17 # 加載數據
18 (x_train, y_train), (x_test, y_test) = mnist.load_data("../test_data_home")
19 # 轉化訓練數據為四維張量形式
20 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1).astype("float32")
21 x_test = x_test.reshape(x_test.shape[0], 28, 28, 1).astype("float32")
22 # 歸一化
23 x_train /= 255
24 x_test /= 255
25 
26 #轉化為one hot 編碼
27 def to_one_hot(y):
28     y_one_hot = np.zeros(10) # 生成全零向量
29     y_one_hot[y] = 1
30     return y_one_hot
31 
32 # 重置標簽
33 y_train_one_hot = np.array([to_one_hot(y_train[i]) for i in range(len(y_train))])
34 y_test_one_hot = np.array([to_one_hot(y_test[i]) for i in range(len(y_test))])
35 # 搭建卷積神經網絡
36 model = Sequential()
37 model.add(Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same', input_shape=(28, 28, 1), 
38                  activation='relu'))
39 # 添加最大池化層
40 model.add(MaxPooling2D(pool_size=(2, 2)))
41 # 添加Dropout層
42 model.add(Dropout(0.2))
43 # 構建深度網絡
44 model.add(Conv2D(64, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu'))
45 model.add(MaxPooling2D(pool_size=(2, 2)))
46 model.add(Dropout(0.2))
47 model.add(Conv2D(128, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu'))
48 model.add(MaxPooling2D(pool_size=(2, 2)))
49 model.add(Dropout(0.2))
50 # 展開
51 model.add(Flatten())
52 # 構造全連接層
53 model.add(Dense(128, activation='relu'))
54 model.add(Dense(64, activation='relu'))
55 model.add(Dense(32, activation='relu'))
56 model.add(Dense(10, activation='softmax'))
57 # 定義損失函數
58 model.compile(loss='categorical_crossentropy', optimizer='adagrad',
59               metrics=['accuracy'])
60 # 訓練
61 model.fit(x_train, y_train_one_hot, validation_data=(x_test, y_test_one_hot),
62           epochs=2, batch_size=128)
63 # 評估
64 # verbose : 0表示不顯示數據,1表示顯示進度
65 scores = model.evaluate(x_test, y_test_one_hot, verbose=0)
66 print(scores)

結果:

 


免責聲明!

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



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