Keras 2 3 keras實現卷積神經網路

2021-08-09 01:38:47 字數 2860 閱讀 3745

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封裝了一些優秀的深度學習框架的底層實現,使用起來相當簡潔,甚至不...