[譯] Keras 速查表:使用 Python 構建神經網路

hu_minghao發表於2019-05-09

使用 Keras 速查表構建你自己的神經網路,便於初學者在 Python 中進行深度學習,附有程式碼示例

Keras 是一個基於 Theano 和 TensorFlow 的易於使用且功能強大的庫,它提供了一些高層的神經網路介面,用於開發和評估深度學習模型。

我們最近推出了第一個使用 Keras 2.0 開發的線上互動深度學習課程,叫做“Deep Learning in Python”。

現在,DataCamp 為那些已經上過這門課但仍然需要一頁參考資料的人,或者那些需要一個額外的推動力才能開始學習的人,建立了 Keras 速查表。

很快,這個速查表就會讓你熟悉如何從這個庫中載入資料集、如何預處理資料、如何構造一個模型結構以及如何編譯、訓練和評估它。由於在如何搭建自己的模型上有著相當大的自由度,你會看到這個速查表展示了一些簡單的關鍵 Keras 程式碼示例,只有瞭解這些你才能開始用 Python 搭建自己的神經網路。

此外,你還可以看到一些關於如何檢查你的模型,如何儲存和載入模型的示例。最後,你也會找到一些關於如何對測試資料做預測,以及如何通過調節優化引數和早停的方式來微調模型的示例。

簡而言之,你會看到這個速查表並不僅僅是向你展示了使用 Keras 庫在 Python 中構建神經網路的六個步驟而已。

keras cheat sheet

總之,這個速查表會加快你的 Python 深度學習旅程:有了這些程式碼示例的幫助,你很快就可以對你的深度學習模型進行預處理、建立、檢驗和調優!

(點選上圖下載可列印的版本,或閱讀下面的線上版本)

Python 資料科學速查表:Keras

Keras 是一個基於 Theano 和 TensorFlow 的易於使用且功能強大的庫,它提供了一些高層的神經網路介面,用於開發和評估深度學習模型。

一個基礎例子

>>> import numpy as np
>>> from keras.models import Sequential
>>> from keras.layers import Dense
>>> data = np.random.random((1000,100))
>>> labels = np.random.randint(2,size=(1000,1))
>>> model = Sequential()
>>> model.add(Dense(32, activation='relu', input_dim=100))
>>> model.add(Dense(1, activation='sigmoid'))
>>> model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
>>> model.fit(data,labels,epochs=10,batch_size=32)
>>> predictions = model.predict(data)
複製程式碼

資料

你的資料需要以 Numpy arrays 或者 Numpy arrays 列表的格式儲存。理想情況下,資料會分為訓練集和測試集,你可以藉助 sklearn.cross_validation 下的 train_test_split 模組來實現。

Keras 資料集

>>> from keras.datasets import boston_housing, mnist, cifar10, imdb
>>> (x_train,y_train),(x_test,y_test) = mnist.load_data()
>>> (x_train2,y_train2),(x_test2,y_test2) = boston_housing.load_data()
>>> (x_train3,y_train3),(x_test3,y_test3) = cifar10.load_data()
>>> (x_train4,y_train4),(x_test4,y_test4) = imdb.load_data(num_words=20000)
>>> num_classes = 10
複製程式碼

其他

>>> from urllib.request import urlopen
>>> data = np.loadtxt(urlopen("http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"),delimiter=",")
>>> X = data[:,0:8]
>>> y = data [:,8]
複製程式碼

預處理

序列填充

>>> from keras.preprocessing import sequence
>>> x_train4 = sequence.pad_sequences(x_train4,maxlen=80)
>>> x_test4 = sequence.pad_sequences(x_test4,maxlen=80)
複製程式碼

One-Hot 編碼

>>> from keras.utils import to_categorical
>>> Y_train = to_categorical(y_train, num_classes)
>>> Y_test = to_categorical(y_test, num_classes)
>>> Y_train3 = to_categorical(y_train3, num_classes)
>>> Y_test3 = to_categorical(y_test3, num_classes)
複製程式碼

訓練和測試集

>>> from sklearn.model_selection import train_test_split
>>> X_train5, X_test5, y_train5, y_test5 = train_test_split(X, y, test_size=0.33, random_state=42)
複製程式碼

標準化/歸一化

>>> from sklearn.preprocessing import StandardScaler
>>> scaler = StandardScaler().fit(x_train2)
>>> standardized_X = scaler.transform(x_train2)
>>> standardized_X_test = scaler.transform(x_test2)
複製程式碼

模型結構

序貫模型

>>> from keras.models import Sequential
>>> model = Sequential()
>>> model2 = Sequential()
>>> model3 = Sequential()
複製程式碼

多層感知機(MLP)

二分類

>>> from keras.layers import Dense
>>> model.add(Dense(12, input_dim=8, kernel_initializer='uniform', activation='relu'))
>>> model.add(Dense(8, kernel_initializer='uniform', activation='relu'))
>>> model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))
複製程式碼

多分類

>>> from keras.layers import Dropout
>>> model.add(Dense(512,activation='relu',input_shape=(784,)))
>>> model.add(Dropout(0.2))
>>> model.add(Dense(512,activation='relu'))
>>> model.add(Dropout(0.2))
>>> model.add(Dense(10,activation='softmax'))
複製程式碼

迴歸

>>> model.add(Dense(64, activation='relu', input_dim=train_data.shape[1]))
>>> model.add(Dense(1))
複製程式碼

卷積神經網路(CNN)

>>> from keras.layers import Activation, Conv2D, MaxPooling2D, Flatten
>>> model2.add(Conv2D(32, (3,3), padding='same', input_shape=x_train.shape[1:]))
>>> model2.add(Activation('relu'))
>>> model2.add(Conv2D(32, (3,3)))
>>> model2.add(Activation('relu'))
>>> model2.add(MaxPooling2D(pool_size=(2,2)))
>>> model2.add(Dropout(0.25))
>>> model2.add(Conv2D(64, (3,3), padding='same'))
>>> model2.add(Activation('relu'))
>>> model2.add(Conv2D(64, (3, 3)))
>>> model2.add(Activation('relu'))
>>> model2.add(MaxPooling2D(pool_size=(2,2)))
>>> model2.add(Dropout(0.25))
>>> model2.add(Flatten())
>>> model2.add(Dense(512))
>>> model2.add(Activation('relu'))
>>> model2.add(Dropout(0.5))
>>> model2.add(Dense(num_classes))
>>> model2.add(Activation('softmax'))
複製程式碼

迴圈神經網路(RNN)

>>> from keras.klayers import Embedding,LSTM
>>> model3.add(Embedding(20000,128))
>>> model3.add(LSTM(128,dropout=0.2,recurrent_dropout=0.2))
>>> model3.add(Dense(1,activation='sigmoid'))
複製程式碼

檢查模型

模型輸出的 shape

>>> model.output_shape
複製程式碼

模型描述

>>> model.summary()
複製程式碼

模型配置

>>> model.get_config()
複製程式碼

列出模型中所有的權重張量

>>> model.get_weights()
複製程式碼

編譯模型

多層感知機(MLP)

多層感知機:二分類

>>> model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
複製程式碼

多層感知機:多分類

>>> model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
複製程式碼

多層感知機:迴歸

>>> model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
複製程式碼

迴圈神經網路(RNN)

>>> model3.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
複製程式碼

模型訓練

>>> model3.fit(x_train4, y_train4, batch_size=32, epochs=15, verbose=1, validation_data=(x_test4, y_test4))
複製程式碼

評估你的模型表現

>>> score = model3.evaluate(x_test, y_test, batch_size=32)
複製程式碼

預測

>>> model3.predict(x_test4, batch_size=32)
>>> model3.predict_classes(x_test4,batch_size=32)
複製程式碼

儲存/載入模型

>>> from keras.models import load_model
>>> model3.save('model_file.h5')
>>> my_model = load_model('my_model.h5')
複製程式碼

模型微調

優化引數

>>> from keras.optimizers import RMSprop
>>> opt = RMSprop(lr=0.0001, decay=1e-6)
>>> model2.compile(loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])
複製程式碼

早停

>>> from keras.callbacks import EarlyStopping
>>> early_stopping_monitor = EarlyStopping(patience=2)
>>> model3.fit(x_train4, y_train4, batch_size=32, epochs=15, validation_data=(x_test4, y_test4), callbacks=[early_stopping_monitor])
複製程式碼

進一步探索

Keras 新手教程開始,您將以一種簡單、循序漸進的方式學習如何探索和預處理一個關於葡萄酒質量的資料集,為分類和迴歸任務構建多層感知機,編譯、擬合和評估模型,並對所構建的模型進行微調。

除此之外,不要錯過我們的 Scikit-Learn 速查表NumPy 速查表Pandas 速查表

如果發現譯文存在錯誤或其他需要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可獲得相應獎勵積分。文章開頭的 本文永久連結 即為本文在 GitHub 上的 MarkDown 連結。


掘金翻譯計劃 是一個翻譯優質網際網路技術文章的社群,文章來源為 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智慧等領域,想要檢視更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章