如何在 Keras 中建立模型?
在本文中,我們將學習如何在 Keras 中建立模型。
簡介
Keras 是一個 Python 開源庫,它提供構建人工神經網路模型的 API,具有極大的靈活性。Keras 中的建模可以使用函式式 API 或 Keras 順序模型來完成。Keras 模組也可在流行的 TensorFlow 庫中使用。
最新版本和安裝
截至撰寫本文時,Keras 的最新版本為 2.1.0。
可以使用 pip 從 PyPI 倉庫安裝 Keras。
Keras 用於建模的優勢
由於 Keras 提供了簡單的 API,因此它可以快速實現。
Keras 靈活且健壯,為構建模型提供了簡單和高階的工作流程。
提供行業級的 API 用於構建健壯的模型。
也可用於快速原型設計和研究工作。
Keras 模型有兩種型別
1. Keras 順序模型
顧名思義,Keras 順序模型允許我們以順序方式逐層構建模型。
這有助於建立僅限於單個輸入和輸出的模型。它用於構建簡單的層。
示例程式碼片段,展示 Keras 順序模型的用法。
from keras.models import Sequential from keras.layers import Dense model=Sequential() model.add(Dense(128,input_shape=(8,))) model.add(Dense(64)) model.add(Dense(32))
2. Keras 函式式 API
Keras 函式式 API 在建立模型方面提供了更大的靈活性。它可以幫助我們建立具有多個輸入和輸出的模型。層可以像在圖中一樣被新增和共享。
Keras 函式式 API 可以用作藍圖,圖和節點可以在需要的地方使用。
Keras 函式式 API 示例 –
from keras.layers import Input, Dense,Concatenate from keras.models import Model import numpy as np # This returns a tensor inputs = Input(shape=(784,)) # a layer instance is callable on a tensor, and returns a tensor x = Dense(64, activation='relu')(inputs) x = Dense(64, activation='relu')(x) predictions = Dense(10, activation='softmax')(x) # This creates a model that includes # the Input layer and three Dense layers model = Model(inputs=inputs, outputs=predictions) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) print(model.summary()) # Keras with muliple inputs input1 = Input(shape=(32,)) input2 = Input(shape=(64,)) x = Concatenate(axis=1)([input1, input2]) output = Dense(10, activation='softmax')(x) model10 = Model([input1, input2],output) print(model10.summary())
使用 TensorFlow API 的 Keras [函式式 API]
Keras 在 TensorFlow 中作為 tf.keras API 提供。函式式 API 主要圍繞構建層的定向無環圖 (DAG) 而構建。它是一個層圖。
使用 tensorflow keras 和 mnist 模型的示例
import tensorflow as tf from tensorflow import keras from tensorflow.keras import layers inputs = keras.Input(shape=(784,)) image_inputs = keras.Input(shape=(32, 32, 3)) dense_layer = layers.Dense(64, activation="relu") x = dense_layer(inputs) x = layers.Dense(64, activation="relu")(x) outputs = layers.Dense(10)(x) model = keras.Model(inputs=inputs, outputs=outputs, name="mnist") #TRAINING AND INFERENCE (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data() x_train = x_train.reshape(60000, 784).astype("float32") / 255 x_test = x_test.reshape(10000, 784).astype("float32") / 255 model.compile( loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True), optimizer=keras.optimizers.RMSprop(), metrics=["accuracy"], ) history = model.fit(x_train, y_train, batch_size=32, epochs=10, validation_split=0.3) test_scores = model.evaluate(x_test, y_test, verbose=2) print("Test loss:", test_scores[0]) print("Test accuracy:", test_scores[1])
函式式 API 的優勢
在函式式 API 中,輸入形狀和資料型別使用 Input 預先建立。API 將對輸入和資料型別的傳遞規範進行內部檢查,並提出有用的建議。
可以繪製圖形,我們可以在圖形中訪問中間節點。例如
features_list = [layer.output for layer in vgg19.layers] feat_extraction_model = keras.Model(inputs=vgg19.input, outputs=features_list)
函式式 API 是可序列化的,可以作為單個檔案儲存,因為它是一個數據結構。
函式式 API 的缺點
由於函式式 API 將網路視為有向無環圖,因此不支援動態架構。
結論
Keras 是一個強大的深度學習模型實現工具/庫,由於其簡單性和健壯性,它既適用於工業也適用於原型設計。順序 API 有助於構建快速模型,而當需要更多控制時,函式式 API 就能派上用場。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP