中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
keras保存模型

舉個(gè)例子:先訓(xùn)練出一個(gè)模型

import 

接下來(lái)第一種方法:只保留模型的參數(shù):這個(gè)有2種方法:

  1. model.save_weights("adasd.h5")

  2. model.load_weights("adasd.h5")
  3. model.predict(x_test)
  1. model.save_weights('./checkpoints/mannul_checkpoint')
  2. model.load_weights('./checkpoints/mannul_checkpoint')
  3. model.predict(x_test)

因?yàn)檫@種方法只保留了參數(shù),而并沒(méi)有保留整個(gè)模型,所以說(shuō)在加載的時(shí)候需要使用model.load_weights。這個(gè)函數(shù)只會(huì)保留模型的權(quán)重,它不包含模型的結(jié)構(gòu),所以當(dāng)我們加載權(quán)重文件時(shí)候,需要先輸入網(wǎng)絡(luò)結(jié)構(gòu)


再第2種方法:保留h5文件,保留整個(gè)模型

這種方法已經(jīng)保存了模型的結(jié)構(gòu)和權(quán)重,以及損失函數(shù)和優(yōu)化器

  1. model.save('keras_model_hdf5_version.h5')

  2. new_model = tf.keras.models.load_model('keras_model_hdf5_version.h5')
  3. new_model.predict(x_test)

注意:這種方法只可以使用在keras的順序模型和函數(shù)式模型中,不能使用在子類模型和自定義模型中,否則會(huì)報(bào)錯(cuò)。


再第3種方法:保留pb文件,保留整個(gè)模型

  1. # Export the model to a SavedModel
  2. model.save('keras_model_tf_version', save_format='tf')

  3. # Recreate the exact same model
  4. new_model = tf.keras.models.load_model('keras_model_tf_version')
  5. new_model.predict(x_test)

這個(gè)方法沒(méi)有保留優(yōu)化器配置。

保留pb文件還有另一種方法:

tf.saved_model.save(model,'文件夾名') tf.saved_model.load('文件夾名')

注意:這里是文件夾名稱??!

當(dāng)我們使用這個(gè)方法后,對(duì)應(yīng)目錄下會(huì)出現(xiàn)一個(gè)文件夾,文件夾下有兩個(gè)子文件夾和一個(gè)子文件:assets、variables、save_model.pb

TensorFlow 為我們提供的SavedModel這一格式可在不同的平臺(tái)上部署模型文件,當(dāng)模型導(dǎo)出為 SavedModel 文件時(shí),無(wú)需建立。

模型的源代碼即可再次運(yùn)行模型,這使得SavedModel尤其適用于模型的分享和部署。

  1. tf.saved_model.save(model,'tf_saved_model_version')
  2. restored_saved_model = tf.saved_model.load('tf_saved_model_version')
  3. f = restored_saved_model.signatures["serving_default"]
注意這里加載好了以后不能直接用predict進(jìn)行預(yù)測(cè)哦。

我們這里看一下保存信息:

!saved_model_cli show --dir tf_saved_model_version --all

使用模型的命令是:

f(digits = tf.constant(x_test.tolist()) )

輸出為:

關(guān)鍵是f = restored_saved_model.signatures["serving_default"]。


最后我們看看自定義模型的保存與加載:

注意這里要用以下命令

@tf.function(input_signature=[tf.TensorSpec([None,32], tf.float32,name='digits')])

把動(dòng)態(tài)圖變成靜態(tài)圖:

  1. class MyModel(tf.keras.Model):

  2. def __init__(self, num_classes=10):
  3. super(MyModel, self).__init__(name='my_model')
  4. self.num_classes = num_classes
  5. # 定義自己需要的層
  6. self.dense_1 = tf.keras.layers.Dense(32, activation='relu')
  7. self.dense_2 = tf.keras.layers.Dense(num_classes)

  8. @tf.function(input_signature=[tf.TensorSpec([None,32], tf.float32,name='digits')])
  9. def call(self, inputs):
  10. #定義前向傳播
  11. # 使用在 (in `__init__`)定義的層
  12. x = self.dense_1(inputs)
  13. return self.dense_2(x)
  1. import numpy as np
  2. x_train = np.random.random((1000, 32))
  3. y_train = np.random.random((1000, 10))
  4. x_val = np.random.random((200, 32))
  5. y_val = np.random.random((200, 10))
  6. x_test = np.random.random((200, 32))
  7. y_test = np.random.random((200, 10))




  8. # 優(yōu)化器
  9. optimizer = tf.keras.optimizers.SGD(learning_rate=1e-3)
  10. # 損失函數(shù)
  11. loss_fn = tf.keras.losses.CategoricalCrossentropy(from_logits=True)

  12. # 準(zhǔn)備metrics函數(shù)
  13. train_acc_metric = tf.keras.metrics.CategoricalAccuracy()
  14. val_acc_metric = tf.keras.metrics.CategoricalAccuracy()

  15. # 準(zhǔn)備訓(xùn)練數(shù)據(jù)集
  16. batch_size = 64
  17. train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train))
  18. train_dataset = train_dataset.shuffle(buffer_size=1024).batch(batch_size)

  19. # 準(zhǔn)備測(cè)試數(shù)據(jù)集
  20. val_dataset = tf.data.Dataset.from_tensor_slices((x_val, y_val))
  21. val_dataset = val_dataset.batch(64)

  22. model = MyModel(num_classes=10)
  23. epochs = 3
  24. for epoch in range(epochs):
  25. print('Start of epoch %d' % (epoch,))

  26. # 遍歷數(shù)據(jù)集的batch_size
  27. for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
  28. with tf.GradientTape() as tape:
  29. logits = model(x_batch_train)
  30. loss_value = loss_fn(y_batch_train, logits)
  31. grads = tape.gradient(loss_value, model.trainable_weights)
  32. optimizer.apply_gradients(zip(grads, model.trainable_weights))

  33. # 更新訓(xùn)練集的metrics
  34. train_acc_metric(y_batch_train, logits)

  35. # 每200 batches打印一次.
  36. if step % 200 == 0:
  37. print('Training loss (for one batch) at step %s: %s' % (step, float(loss_value)))
  38. print('Seen so far: %s samples' % ((step + 1) * 64))

  39. # 在每個(gè)epoch結(jié)束時(shí)顯示metrics。
  40. train_acc = train_acc_metric.result()
  41. print('Training acc over epoch: %s' % (float(train_acc),))
  42. # 在每個(gè)epoch結(jié)束時(shí)重置訓(xùn)練指標(biāo)
  43. train_acc_metric.reset_states()

  44. # 在每個(gè)epoch結(jié)束時(shí)運(yùn)行一個(gè)驗(yàn)證集。
  45. for x_batch_val, y_batch_val in val_dataset:
  46. val_logits = model(x_batch_val)
  47. # 更新驗(yàn)證集merics
  48. val_acc_metric(y_batch_val, val_logits)
  49. val_acc = val_acc_metric.result()
  50. val_acc_metric.reset_states()
  51. print('Validation acc: %s' % (float(val_acc),))

模型保存方法一:保存weight:

  1. model.save_weights("adasd.h5")
  2. model.load_weights("adasd.h5")
  3. model.predict(x_test)
  1. model.save_weights('./checkpoints/mannul_checkpoint')
  2. model.load_weights('./checkpoints/mannul_checkpoint')
  3. model.predict(x_test)

模型保存方法二:保留h5,方法失敗,因?yàn)樽远x模型無(wú)法保留h5:

#model.save('my_saved_model.h5')

模型保存方法三:pb格式:

  1. model.save('path_to_my_model',save_format='tf')
  2. new_model = tf.keras.models.load_model('path_to_my_model')
  3. new_model.predict(x_test)

輸出為:

或者:

  1. tf.saved_model.save(model,'my_saved_model')
  2. restored_saved_model = tf.saved_model.load('my_saved_model')
  3. f = restored_saved_model.signatures["serving_default"]

  4. f(digits = tf.constant(x_test.tolist()) )
!saved_model_cli show --dir my_saved_model --all

注意前面模型定義時(shí)候:

@tf.function(input_signature=[tf.TensorSpec([None,32], tf.float32,name='digits')])

這個(gè)digits,對(duì)應(yīng)的就是input['digits'],也對(duì)應(yīng)的是f函數(shù)中的自變量digits。


總結(jié):

注意第2種方法h5格式只可以使用在keras的順序模型和函數(shù)式模型中,不能使用在子類模型和自定義模型中。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
TF2.0 XLA加速測(cè)試
DeepChem: 集成Tensorflow及PyTorch深度學(xué)習(xí)框架
深度學(xué)習(xí)-Tensorflow2.2-圖像處理{10}-UNET圖像語(yǔ)義分割模型-24
學(xué)習(xí)教程 | 借助注意力模型實(shí)現(xiàn)看圖說(shuō)話
使用TensorFlow和深度混合學(xué)習(xí)進(jìn)行時(shí)間序列預(yù)測(cè)
回調(diào)函數(shù)Callback
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服