cnn(convolutional neural networks)卷積神經網路在 keras 上的**實現。 用到的資料集還是mnist。不同的是這次用到的層比較多,匯入的模組也相應增加了一些。
下面直接進入**部分:
import numpy as np
np.random.seed(1337) # for reproducibility
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import sequential
from keras.layers import dense, activation, convolution2d, maxpooling2d, flatten
from keras.optimizers import adam
# download the mnist to the path '~/.keras/datasets/' if it is the first time to be called
# x shape (60,000 28x28), y shape (10,000, )
(x_train, y_train), (x_test, y_test) = mnist.load_data()
資料預處理
# data pre-processing
x_train = x_train.reshape(-1, 1,28, 28)/255.
x_test = x_test.reshape(-1, 1,28, 28)/255.
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)
開始構造模型
# another way to build your cnn
model = sequential()
新增第一層卷基層
# conv layer 1 output shape (32, 28, 28)
model.add(convolution2d(
batch_input_shape=(64, 1, 28, 28),
filters=32,
kernel_size=5, # 濾波器邊長
strides=1, # 步數
padding='same', # padding method
data_format='channels_first', # 以128x128的rgb影象為例,「channels_first」應將資料組織為(3,128,128),而「channels_last」應將資料組織為(128,128,3)。
))model.add(activation('relu'))
第一層 pooling(池化,下取樣),解析度長寬各降低一半,輸出資料shape為(32,14,14)
# pooling layer 1 (max pooling) output shape (32, 14, 14)
model.add(maxpooling2d(
pool_size=2,
strides=2,
padding='same', # padding method
data_format='channels_first',
))
第二層卷積和第二層pooling
# conv layer 2 output shape (64, 14, 14)
model.add(convolution2d(64, 5, strides=1, padding='same', data_format='channels_first'))
model.add(activation('relu'))
# pooling layer 2 (max pooling) output shape (64, 7, 7)
model.add(maxpooling2d(2, 2, 'same', data_format='channels_first'))
經過以上處理之後資料shape為(64,7,7),需要將資料抹平成一維,再新增全連線層1
model.add(flatten())
model.add(dense(1024))
model.add(activation('relu'))
新增全連線層2(即輸出層)
model.add(dense(10))
model.add(activation('softmax'))
設定adam優化方法,loss函式, metrics方法來觀察輸出結果
model.compile(optimizer=adam,
loss='categorical_crossentropy',
metrics=['accuracy'])
開始訓練模型
model.fit(x_train, y_train, epoch=1, batch_size=32,)
輸出test的loss和accuracy結果
keras實現分組卷積
分組卷積在pytorch中比較容易實現,只需要在卷積的時候設定group引數即可 比如設定分組數為2 conv group nn.conv2d c in,c out,kernel size 3,stride 3,padding 1,groups 2 但是,tensorflow中目前還沒有分組卷積,只...
Keras上實現AutoEncoder自編碼器
無監督特徵學習 unsupervised feature learning 是一種仿人腦的對特徵逐層抽象提取的過程,學習過程中有兩點 一是無監督學習,即對訓練資料不需要進行標籤化標註,這種學習是對資料內容的組織形式的學習,提取的是頻繁出現的特徵 二是逐層抽象,特徵是需要不斷抽象的。自編碼器 auto...
keras 多層lstm Keras實現LSTM
lstm是優秀的迴圈神經網路 rnn 結構,而lstm在結構上也比較複雜,對rnn和lstm還稍有疑問的朋友可以參考 recurrent neural networks vs lstm 這裡我們將要使用keras搭建lstm.keras封裝了一些優秀的深度學習框架的底層實現,使用起來相當簡潔,甚至不...