小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Keras搭建卷積神經(jīng)網(wǎng)絡(luò)

 禁忌石 2022-12-29 發(fā)布于浙江

本文我們將學(xué)習(xí)使用Keras一步一步搭建一個(gè)卷積神經(jīng)網(wǎng)絡(luò)。具體來說,我們將使用卷積神經(jīng)網(wǎng)絡(luò)對(duì)手寫數(shù)字(MNIST數(shù)據(jù)集)進(jìn)行識(shí)別,并達(dá)到99%以上的正確率。

文章圖片1

我們還將介紹Colaboratory——一個(gè)免費(fèi)的Jupyter notebook環(huán)境,關(guān)鍵的是可以免費(fèi)使用GPU(學(xué)生黨買不起呀)!

文章圖片2

為什么選擇Keras呢?

主要是因?yàn)楹?jiǎn)單方便。更多細(xì)節(jié)請(qǐng)看:https:///

什么卷積神經(jīng)網(wǎng)絡(luò)?

簡(jiǎn)單地說,卷積神經(jīng)網(wǎng)絡(luò)(CNNs)是一種多層神經(jīng)網(wǎng)絡(luò),它可以有效地減少全連接神經(jīng)網(wǎng)絡(luò)參數(shù)量太大的問題。如果對(duì)其背后的原理感興趣的話,斗膽推薦一些學(xué)習(xí)資料:

深度學(xué)習(xí)入門:基于Python的理論與實(shí)現(xiàn)

Neural Networks and Deep Learning

CS231n: Convolutional Neural Networks for Visual Recognition

下面就直接進(jìn)入主題吧!

1. 搭建環(huán)境

如果想要在個(gè)人電腦上搭建的話,我們需要先安裝好Python,進(jìn)入:https://www./

文章圖片3

下載安裝就好。

之后,打開終端輸入pip install -i
https://pypi.douban.com/simple keras

文章圖片4

輸入以下命令可以確認(rèn)正常安裝:

python -c 'import keras;print(keras.__version__)'
文章圖片5

當(dāng)然,如果想直接使用Colaboratory的話,直接打開你的Google云端硬盤

文章圖片6

為了方便起見,新建一個(gè)名為Keras的文件夾,進(jìn)入Keras文件夾,單擊鼠標(biāo)右鍵

文章圖片7

選擇Colaboratory就可新建一個(gè)Jupyter notebok啦!

如果沒有看到Colaboratory這一項(xiàng)的話,就選擇關(guān)聯(lián)更多應(yīng)用

文章圖片8

搜索Colaboratory,并關(guān)聯(lián)即可。

2. 導(dǎo)入庫(kù)和模塊

我們導(dǎo)入Sequential模型(相當(dāng)于放積木的桌子)

from keras.models import Sequential

接下來,我們導(dǎo)入各種層(各種形狀各異積木)

from keras.layers import Conv2D, MaxPool2Dfrom keras.layers import Dense, Flatten

最后,我們導(dǎo)入to_categorical函數(shù),以便之后對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換

from keras.utils import to_categorical

3. 加載數(shù)據(jù)

MNIST是一個(gè)非常有名的手寫數(shù)字?jǐn)?shù)據(jù)集,我們可以使用Keras輕松加載它。

from keras.datasets import mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()

查看一下訓(xùn)練集的大小

print(x_train.shape)# (60000, 28, 28)

可以看到60000個(gè)樣本,它們都是28像素x28像素的。

看一下這些手寫數(shù)字長(zhǎng)什么樣

import matplotlib.pyplot as plt%matplotlib inlineplt.imshow(x_train[0])
文章圖片9

4. 預(yù)處理數(shù)據(jù)

使用Keras是必須顯式聲明輸入圖像深度的尺寸。例如,具有所有3個(gè)RGB通道的全色圖像的深度為3。

我們的MNIST圖像的深度為1,但我們必須明確聲明。

也就是說,我們希望將數(shù)據(jù)集從形狀(n,rows,cols)轉(zhuǎn)換為(n,rows,cols,channels)。

img_x, img_y = 28, 28x_train = x_train.reshape(x_train.shape[0], img_x, img_y, 1)x_test = x_test.reshape(x_test.shape[0], img_x, img_y, 1)

除此之外,我們將數(shù)據(jù)標(biāo)準(zhǔn)化一下:

x_train = x_train.astype('float32')x_test = x_test.astype('float32')x_train /= 255x_test /= 255

之后,將標(biāo)記值(y_train, y_test)轉(zhuǎn)換為One-Hot Encode的形式,至于為什么要這么做?請(qǐng)查看:
https:///why-one-hot-encode-data-in-machine-learning/

y_train = to_categorical(y_train, 10)y_test = to_categorical(y_test, 10)print(y_train.shape)# (60000, 10)

5. 定義模型結(jié)構(gòu)

我們參照下圖定義一個(gè)模型結(jié)構(gòu)

文章圖片10

代碼如下:

model = Sequential()model.add(Conv2D(32, kernel_size=(5,5), activation='relu', input_shape=(img_x, img_y, 1)))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Conv2D(64, kernel_size=(5,5), activation='relu'))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Flatten())model.add(Dense(1000, activation='relu'))model.add(Dense(10, activation='softmax'))

是不是有點(diǎn)搭積木的既視感?

6. 編譯

現(xiàn)在,只需要編譯模型,就可以開始訓(xùn)練了。當(dāng)編譯模型時(shí),我們聲明了損失函數(shù)和優(yōu)化器(SGD,Adam等)。

model.compile(optimizer='adam',              loss='categorical_crossentropy',              metrics=['accuracy'])

Keras有很多損失函數(shù)和優(yōu)化器供你選擇。

7. 訓(xùn)練

接下來,我們傳入訓(xùn)練集進(jìn)行訓(xùn)練

model.fit(x_train, y_train, batch_size=128, epochs=10)

以下是在Colaboratory上訓(xùn)練的過程

文章圖片11

以下是在個(gè)人電腦上訓(xùn)練的過程

文章圖片12

可以看到,花費(fèi)的時(shí)間差別還是很大的!

8. 評(píng)估模型

最后,傳入測(cè)試集對(duì)模型模型進(jìn)行評(píng)估

score = model.evaluate(x_test, y_test)print('acc', score[1])# acc 0.9926

準(zhǔn)確率達(dá)到了%99以上!

完整代碼如下:

# 2. 導(dǎo)入庫(kù)和模塊from keras.models import Sequentialfrom keras.layers import Conv2D, MaxPool2Dfrom keras.layers import Dense, Flattenfrom keras.utils import to_categorical# 3. 加載數(shù)據(jù)from keras.datasets import mnist(x_train, y_train), (x_test, y_test) = mnist.load_data()# 4. 數(shù)據(jù)預(yù)處理img_x, img_y = 28, 28x_train = x_train.reshape(x_train.shape[0], img_x, img_y, 1)x_test = x_test.reshape(x_test.shape[0], img_x, img_y, 1)x_train = x_train.astype('float32')x_test = x_test.astype('float32')x_train /= 255x_test /= 255y_train = to_categorical(y_train, 10)y_test = to_categorical(y_test, 10)# 5. 定義模型結(jié)構(gòu)model = Sequential()model.add(Conv2D(32, kernel_size=(5,5), activation='relu', input_shape=(img_x, img_y, 1)))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Conv2D(64, kernel_size=(5,5), activation='relu'))model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))model.add(Flatten())model.add(Dense(1000, activation='relu'))model.add(Dense(10, activation='softmax'))# 6. 編譯model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])# 7. 訓(xùn)練model.fit(x_train, y_train, batch_size=128, epochs=10)# 8. 評(píng)估模型score = model.evaluate(x_test, y_test)print('acc', score[1])

#今日頭條小助手##cnn##深度學(xué)習(xí)#

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多