tensorflow學習筆記keras(5)------北京大學 曹健

蝦米龜兒發表於2020-10-17

tf.keras搭建網路八股

1. import

import tensorflow as tf
from sklearn import datasets
import numpy as np

2. train,test

x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

3. tf.keras.models.Sequential(逐層描述網路結構,走一邊前向傳播)

Sequential 函式是一個容器,描述了神經網路的網路結構,在 Sequential函式的輸入引數中描述從輸入層到輸出層的網路結構。

如:

拉直層tf.keras.layers.Flatten()
拉直層可以變換張量的尺寸,把輸入特徵拉直為一維陣列,是不含計算引數的層。

全連線層tf.keras.layers.Dense( 神經元個數,
activation=”啟用函式”,
kernel_regularizer=”正則化方式”)

其中:
activation(字串給出)可選
relu、softmax、sigmoid、tanh 等

kernel_regularizer 可選
tf.keras.regularizers.l1() L1正則化、
tf.keras.regularizers.l2() L2正則化

卷積層tf.keras.layers.Conv2D( filter = 卷積核個數,kernel_size = 卷積核尺寸,strides = 卷積步長,padding = “valid” or “same”)

迴圈層:LSTM 層tf.keras.layers.LSTM()

舉例:

model = tf.keras.models.Sequential(
    [tf.keras.layers.Dense(3, activation="relu",
                           kernel_regularizer=tf.keras.regularizers.l2())])

採用全連線層,3表示輸入神經元個數,啟用函式用relu,第三個引數用l2正則化。(易錯點,選擇啟用函式可以用字串或tf.nn.relu; 還有l2正則化後記得加括號,否則報錯)

4. compile(訓練方法的配置,優化器、損失函式、評測指標)

Model.compile( optimizer = 優化器, loss = 損失函式, metrics = [“準確率”])

  1. 優化器:

sgd’or tf.optimizers.SGD( lr=學習率,decay=學習率衰減率,
momentum=動量引數)
adagrad’or tf.keras.optimizers.Adagrad(lr=學習率,
decay=學習率衰減率)
adadelta’or tf.keras.optimizers.Adadelta(lr=學習率,
decay=學習率衰減率)
adam’or tf.keras.optimizers.Adam (lr=學習率,
decay=學習率衰減率)

  1. 損失函式:

mse’or tf.keras.losses.MeanSquaredError()
sparse_categorical_crossentropy
or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)

  1. metrics:
    accuracy’:y_和 y 都是數值,如 y_=[1] y=[1]。
    categorical_accuracy’:y_和 y 都是以獨熱碼和概率分佈表示。
    如 y_=[0, 1, 0], y=[0.256, 0.695, 0.048]。
    ‘sparse_ categorical_accuracy’:y_是以數值形式給出,y 是以獨熱碼形式
    給出。 如 y_=[1],y=[0.256, 0.695, 0.048]。

通常用第三種。

model.compile(optimizer=tf.keras.optimizers.Adam(),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['sparse_categorical_accuracy'])

(優化器加括號,否則報錯,此外括號內可設定學習率等引數,)

5. fit(輸入特徵和標籤,batch,迭代次數)

model.fit(訓練集的輸入特徵, 訓練集的標籤, batch_size, epochs,
validation_data = (測試集的輸入特徵,測試集的標籤),
validataion_split = 從測試集劃分多少比例給訓練集,
validation_freq = 測試的 epoch 間隔次數)

model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)

6. summary(列印)

在這裡插入圖片描述

7. 總得

import tensorflow as tf
from sklearn import datasets
import numpy as np


x_train = datasets.load_iris().data
y_train = datasets.load_iris().target

np.random.seed(116)
np.random.shuffle(x_train)
np.random.seed(116)
np.random.shuffle(y_train)
tf.random.set_seed(116)

model = tf.keras.models.Sequential(
    [tf.keras.layers.Dense(3, activation=tf.nn.relu,
                           kernel_regularizer=tf.keras.regularizers.l2())])

model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.1),
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['sparse_categorical_accuracy'])

model.fit(x_train, y_train, batch_size=32, epochs=500, validation_split=0.2, validation_freq=20)

model.summary()

相關文章