TensorFlow2學習二、TensorFlow Keras 構建簡單網絡

TensorFlow2學習二、TensorFlow Keras 構建簡單網絡

一、簡介

Keras 是一個用於構建和訓練深度學習模型的高階 API。它可用於快速設計原型、高級研究和生產。

1. 導入tf.keras

import tensorflow as tf
from tensorflow.keras import layers
print(tf.__version__)
print(tf.keras.__version__)

二、構建簡單模型

1. 按順序堆疊模型

序列模型各層之間是依次順序的線性關係,模型結構通過一個列表來制定

model = tf.keras.Sequential()
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

2. 網絡配置

tf.keras.layers中網絡配置

  • activation:設置層的激活函數。
  • kernel_initializer 和 bias_initializer:創建層權重(核和偏差)的初始化方案。此參數是一個名稱或可調用對象,默認為 "Glorot uniform" 初始化器。
  • kernel_regularizer 和 bias_regularizer:應用層權重(核和偏差)的正則化方案,例如 L1 或 L2 正則化。默認情況下,系統不會應用正則化函數。

示例:

layers.Dense(32, activation='sigmoid')
layers.Dense(32, activation=tf.sigmoid)
layers.Dense(32, kernel_initializer='orthogonal')
layers.Dense(32, kernel_initializer=tf.keras.initializers.glorot_normal)
layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l2(0.01))
layers.Dense(32, kernel_regularizer=tf.keras.regularizers.l1(0.01))

三、訓練和評估

1. compile用來配置模型的學習過程

model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
loss=tf.keras.losses.categorical_crossentropy,
metrics=[tf.keras.metrics.categorical_accuracy])

# Configure a model for mean-squared error regression.
model.compile(optimizer=tf.train.AdamOptimizer(0.01),
loss='mse', # mean squared error
metrics=['mae']) # mean absolute error

# Configure a model for categorical classification.
model.compile(optimizer=tf.train.RMSPropOptimizer(0.01),
loss=keras.losses.categorical_crossentropy,
metrics=[keras.metrics.categorical_accuracy])

參數說明:

  • optimizer:訓練過程的優化方法。此參數通過 tf.train 模塊的優化方法的實例來指定,比如:AdamOptimizer, RMSPropOptimizer,

GradientDescentOptimizer。

  • loss:訓練過程中使用的損失函數(通過最小化損失函數來訓練模型)。 常見的選擇包括:均方誤差(mse),categorical_crossentropy和binary_crossentropy。 損失函數由名稱或通過從tf.keras.losses模塊傳遞可調用對象來指定。
  • metrics:訓練過程中,監測的指標(Used to monitor training)。

指定方法:名稱 或 可調用對象 from the tf.keras.metrics 模塊。

2. 數據小的時候輸入Numpy數據,模型使用fit訓練數據:

import numpy as np

train_x = np.random.random((1000, 72))
train_y = np.random.random((1000, 10))

val_x = np.random.random((200, 72))
val_y = np.random.random((200, 10))

model.fit(train_x, train_y, epochs=10, batch_size=100,
validation_data=(val_x, val_y))

fit參數說明:

  • epochs:訓練多少輪。(小批量)
  • batch_size:當傳遞NumPy數據時,模型將數據分成較小的批次,並在訓練期間迭代這些批次。 此整數指定每個批次的大小。 請注意,如果樣本總數不能被批量大小整除,則最後一批可能會更小。
  • validation_data:在對模型進行原型設計時,您希望輕鬆監控其在某些驗證數據上的性能。 傳遞這個參數 - 輸入和標籤的元組 - 允許模型在每個epoch的末尾以傳遞數據的推理模式顯示損失和度量。

這裡根據需要也可以不加驗證 validation_data。

3. 數據集api tf.data輸入數據

dataset = tf.data.Dataset.from_tensor_slices((train_x, train_y))
dataset = dataset.batch(32)
dataset = dataset.repeat()
val_dataset = tf.data.Dataset.from_tensor_slices((val_x, val_y))
val_dataset = val_dataset.batch(32)
val_dataset = val_dataset.repeat()

model.fit(dataset, epochs=10, steps_per_epoch=30,
validation_data=val_dataset, validation_steps=3)

這裡,fit方法使用steps_per_epoch參數,這是模型在移動到下一個epoch之前運行的訓練步數。
由於數據集生成批量數據,因此此代碼段不需要batch_size。
這裡的validation_data也按實際需要賦值,可以不加。

4. 評估evaluate 與 預測predict

test_x = np.random.random((1000, 72))
test_y = np.random.random((1000, 10))
model.evaluate(test_x, test_y, batch_size=32)
test_data = tf.data.Dataset.from_tensor_slices((test_x, test_y))
test_data = test_data.batch(32).repeat()
model.evaluate(test_data, steps=30)
# predict
result = model.predict(test_x, batch_size=32)
print(result)

四、創建一個最簡單的模型並訓練、預測

import tensorflow as tf
import numpy as np
from tensorflow import keras

model = tf.keras.Sequential(
[keras.layers.Dense(units=1, input_shape=[1])]

)

model.compile(optimizer='sgd', loss='mean_squared_error')

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-3.0, -1.0, 1.0, 3.0, 5.0, 7.0], dtype=float)

model.fit(xs, ys, epochs=500)
print(model.predict([10.0]))


分享到:


相關文章: