日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【深度学习】(6) tensorflow2.0使用keras高层API

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【深度学习】(6) tensorflow2.0使用keras高层API 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

各位同學好,今天和大家分享一下TensorFlow2.0深度學習中借助keras的接口減少神經網絡代碼量。主要內容有:

1. metrics指標;2. compile 模型配置;3. fit 模型訓練;4. evaluate 模型評估;5. predict 預測;6. 自定義網絡


1. metrics 性能指標

加權平均值:?tf.keras.metrics.Mean

預測值和真實值的準確度:?tf.keras.metrics.Accuracy


1.1 新建一個metrics指標

準確度指標?metrics.Accuracy()?一般用于訓練集,加權平均值 metrics.Mean() ?一般用于測試集

# 新建準確度指標
acc_meter = metrics.Accuracy() 
# 新建平均值指標
mean_meter = metrics.Mean()  

1.2 向metrics添加數據

添加數據:update_state()。每一次迭代,都向準確率指標中添加測試數據的真實值和測試數據的預測值,將準確率保存在緩存區,需要時取出來。向平均損失指標中添加每一次訓練產生的損失,每添加進來一個值就計算加權平均值sample_weight指定每一項的權重,將結果保存在緩存區,需要時取出來。

# 計算真實值和預測值之間的準確度
acc_meter.update_state(y_true, predict) 
# 計算平均損失
mean_meter = mean_meter.update_state(loss, sample_weight=None)

1.3 從metrics中取出數據

取出數據:result().numpy()。result()返回tensor類型數據,轉換成numpy()類型的數據

# 取出準確率
acc_meter.result().numpy() 
# 取出訓練集的損失值的均值
mean_meter.result().numpy()

1.4 清空緩存

清空緩存:reset_states()。每一次循環緩存區都會將之前的數據保存,在開始第二次循環之前,應該把緩存區清空,重新讀入數據。

# 清空準確率的緩存
acc_meter.reset_states()
# 清空加權均值的緩存
mean_meter.reset_states()

2. compile 模型配置

compile(optimizer, loss, metrics, loss_weights)

參數設置:

optimizer: 用來配置模型的優化器,可以調用tf.keras.optimizers API配置模型所需要的優化器。

loss: 用來配置模型的損失函數,可以通過名稱調用tf.losses API中已經定義好的loss函數。

metrics: 用來配置模型評價的方法,模型訓練和測試過程中的度量指標,如accuracy、mse等

loss_weights: float類型,損失加權系數,總損失是所有損失的加權和,它的元素個數和模型的輸出數量是1比1的關系。

# 選擇優化器Adam,loss為交叉熵損失,測試集評價指標accurancy
network.compile(optimizer=optimizers.Adam(lr=0.01), #學習率0.01loss = tf.losses.CategoricalCrossentropy(from_logits=True),metrics = ['accuracy'])

3. fit 模型訓練

fit(x, y, batch_size, epochs, validation_split, validation_data, shuffle,?validation_freq)

參數:

x: 訓練集的輸入數據,可以是array或者tensor類型。

y: 訓練集的目標數據,可以是array或者tensor類型。

batch_size:每一個batch的大小,默認32

epochs: 迭代次數

validation_split:配置測試集數據占訓練數據集的比例,取值范圍為0~1。

validation_data: 配置測試集數據(輸入特征及目標)。如果已經配置validation_split參數,則可以不配置該參數。如果同時配置validation_split和validation_data參數,那么validation_split參數的配置將會失效。

shuffle:配置是否隨機打亂訓練數據。當配置steps_per_epoch為None時,本參數的配置失效。

validation_freq: 每多少次循環做一次測試

# ds為包含輸入特征及目標的數據集
network.fit(ds, eopchs=20, validation_data=ds_val, validation_freq=2)
# validation_data給定測試集,validation_freq每多少次大循環做一次測試,測試時自動計算準確率

4.?evaluate 模型評估

evaluate(x, y, batch_size, sample_weight, steps)

返回模型的損失及準確率等相關指標

參數:

x: 輸入測試集特征數據

y:測試集的目標數據

batch_size: 整數或None。每個梯度更新的樣本數。如果未指定,batch_size將默認為32。如果數據采用數據集,生成器形式,則不要指定batch_size。

sample_weight: 測試樣本的可選Numpy權重數組,用于加權損失函數。

steps: 整數或None。宣布評估階段結束之前的步驟總數。


5. predict 預測

predict(x, batch_size,?steps)

參數:

x: numpy類型,tensor類型。預測所需的特征數據

batch_size: 每個梯度更新的樣本數。如果未指定,batch_size將默認為32

steps: 整數或None,宣布預測回合完成之前的步驟總數(樣本批次)。

等同于:

sample = next(iter(ds_pred)) # 每次從驗證數據中取出一組batch
x = sample[0] # x 保存第0組驗證集特征值
pred = network.predict(x)  # 獲取每一個分類的預測結果
pred = tf.argmax(pred, axis=1) # 獲取值最大的所在的下標即預測分類的結果
print(pred)

6. sequential

Sequential模型適用于簡單堆疊網絡層,即每一層只有一個輸入和一個輸出。

# ==1== 設置全連接層
# [b,784]=>[b,256]=>[b,128]=>[b,64]=>[b,32]=>[b,10],中間層一般從大到小降維
network = Sequential([layers.Dense(256, activation='relu'), #第一個連接層,輸出256個特征layers.Dense(128, activation='relu'), #第二個連接層layers.Dense(64, activation='relu'), #第三個連接層layers.Dense(32, activation='relu'), #第四個連接層layers.Dense(10), #最后一層不需要激活函數,輸出10個分類])
# ==2== 設置輸入層維度
network.build(input_shape=[None, 28*28])
# ==3== 查看網絡結構
network.summary()
# ==4== 查看網絡的所有權重和偏置
network.trainable_variables
# ==5== 自動把x從第一層傳到最后一層
network.call()

7. 自定義層構建網絡

通過對 tf.keras.Model 進行子類化并定義自己的前向傳播模型。在 __init__ 方法中創建層并將它們設置為類實例的屬性。在 call 方法中定義前向傳播。

# 自定義Dense層
class MyDense(layers.Layer): #必須繼承layers.Layer層,放到sequential容器中# 初始化方法def __int__(self, input_dim, output_dim):super(MyDense, self).__init__() # 調用母類初始化,必須# 自己發揮'w''b'指定名字沒什么用,創建shape為[input_dim, output_dim的權重# 使用add_variable創建變量self.kernel = self.add_variable('w', [input_dim, output_dim])self.bias = self.add_variable('b', [output_dim])# call方法,training來指示現在是訓練還是測試def call(self, inputs, training=None):out = inputs @ self.kernel + self.biasreturn out# 自定義層來創建網絡
class MyModel(keras.Model):  # 必須繼承keras.Model大類,才能使用complie、fit等功能# def __init__(self):super(MyModel, self).__init__() # 調用父類Mymodel# 使用自定義層創建5層self.fc1 = MyDense(28*28,256) #input_dim=784,output_dim=256self.fc2 = MyDense(256,128)self.fc3 = MyDense(128,64)self.fc4 = MyDense(64,32)self.fc5 = MyDense(32,10)def call(self, inputs, training=None):# x從輸入層到輸出層x = self.fc1(inputs)x = tf.nn.relu(x)x = self.fc2(x)x = tf.nn.relu(x)        x = self.fc3(x)x = tf.nn.relu(x)x = self.fc4(x)x = tf.nn.relu(x)x = self.fc5(x) #logits層return x

總結

以上是生活随笔為你收集整理的【深度学习】(6) tensorflow2.0使用keras高层API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。