自慰套教室~女子全员妊娠,精品无码国产自产拍在线观看蜜桃,亚洲国产精品成人精品无码区,久别的草原在线看视频免费

集團站切換校區

驗證碼已發送,請查收短信

復制成功
微信號:togogoi
添加微信好友, 詳細了解課程
已復制成功,如果自動跳轉微信失敗,請前往微信添加好友
打開微信
圖標

業界新聞

當前位置:首頁 > >業界新聞 > >

人工智能AI培訓_Tensorflow 2.0保存和加載模型

發布時間: 2019-07-12 10:02:55

人工智能AI培訓_Tensorflow 2.0保存和加載模型

模型進度可以在訓練期間和訓練后保存。這意味著模型可以在它停止的地方繼續,并避免長時間的訓練。保存還意味著您可以共享您的模型,其他人可以重新創建您的工作。當發布研究模型和技術時,大多數機器學習實踐者共享:

l 用于創建模型的代碼

l 以及模型的訓練權重或參數

共享此數據有助于其他人了解模型的工作原理,并使用新數據自行嘗試。

注意:小心不受信任的代碼(TensorFlow模型是代碼)。有關詳細信息,請參閱安全使用TensorFlow 。

選項:

保存TensorFlow模型有多種方法,具體取決于你使用的API。本章節使用tf.keras(一個高級API,用于TensorFlow中構建和訓練模型),有關其他方法,請參閱TensorFlow保存和還原指南保存在eager。

人工智能AI培訓

1. 設置

1.1. 安裝和導入

需要安裝和導入TensorFlow和依賴項

pip install h5py pyyaml

1.2. 獲取樣本數據集

我們將使用MNIST數據集來訓練我們的模型以演示保存權重,要加速這些演示運行,請只使用前1000個樣本數據:

from __future__ import absolute_import, division, print_function, unicode_literals
import os
import tensorflow as tf
try:
    import tensorflow.keras as keras
except:
    import tensorflow.python.keras as keras

#獲取樣本數據集
(train_images, train_labels), (test_images, test_labels) = keras.datasets.mnist.load_data()
train_labels = train_labels[:1000]
test_labels = test_labels[:1000]
train_images = train_images[:1000].reshape(-1, 28 * 28) / 255.0
test_images = test_images[:1000].reshape(-1, 28 * 28) / 255.0

1.3. 定義模型

讓我們構建一個簡單的模型,我們將用它來演示保存和加載權重。

#定義模型
# 返回一個簡短的序列模型
def create_model():
  model = tf.keras.models.Sequential([
    keras.layers.Dense(512, activation='relu', input_shape=(784,)),
    keras.layers.Dropout(0.2),
    keras.layers.Dense(10, activation='softmax')
  ])
  model.compile(optimizer='adam',
                loss='sparse_categorical_crossentropy',
                metrics=['accuracy'])
  return model
# 創建基本模型實例
model = create_model()
print(model.summary())

 

Model: "sequential"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense (Dense)                (None, 512)               401920    

_________________________________________________________________

dropout (Dropout)            (None, 512)               0         

_________________________________________________________________

dense_1 (Dense)              (None, 10)                5130      

=================================================================

Total params: 407,050

Trainable params: 407,050

Non-trainable params: 0

_________________________________________________________________

2. 在訓練期間保存檢查點

主要用例是在訓練期間和訓練結束時自動保存檢查點,通過這種方式,您可以使用訓練有素的模型,而無需重新訓練,或者在您離開的地方繼續訓練,以防止訓練過程中斷。

tf.keras.callbacks.ModelCheckpoint是執行此任務的回調,回調需要幾個參數來配置檢查點。

2.1. 檢查點回調使用情況

訓練模型并將其傳遞給 ModelCheckpoint回調

#在訓練期間保存檢查點
checkpoint_path = "training_1/cp.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)
# 創建一個檢查點回調
cp_callback = tf.keras.callbacks.ModelCheckpoint(checkpoint_path,
                                     save_weights_only=True,
                                     verbose=1)

model = create_model()
model.fit(train_images, train_labels,  epochs = 10,
          validation_data = (test_images,test_labels),
          callbacks = [cp_callback])  # pass callback to training

 

  Train on 1000 samples, validate on 1000 samples

  ......

  Epoch 10/10

  960/1000 [===========================>..] - ETA: 0s - loss: 0.0392 - accuracy: 1.0000

  Epoch 00010: saving model to training_1/cp.ckpt

  1000/1000 [==============================] - 0s 207us/sample - loss: 0.0393 - accuracy: 1.0000 - val_loss: 0.3976 - val_accuracy: 0.8750

 

  <tensorflow.python.keras.callbacks.History at 0x7efc3eba7358>

這將創建一個TensorFlow檢查點文件集合,這些文件在每個周期結束時更新。
文件夾checkpoint_dir下的內容如下:(Linux系統使用 ls命令查看)

checkpoint  cp.ckpt.data-00000-of-00001  cp.ckpt.index

創建一個新的未經訓練的模型,僅從權重恢復模型時,必須具有與原始模型具有相同體系結構的模型,由于它是相同的模型架構,我們可以共享權重,盡管它是模型的不同示例。

現在重建一個新的,未經訓練的模型,并在測試集中評估它。未經訓練的模型將在隨機水平(10%的準確率):

model = create_model()
loss, acc = model.evaluate(test_images, test_labels)
print("Untrained model, accuracy: {:5.2f}%".format(100*acc))

 

1000/1000 [==============================] - 0s 107us/sample - loss: 2.3224 - accuracy: 0.1230

Untrained model, accuracy: 12.30%

然后從檢查點加載權重,并重新評估:

model.load_weights(checkpoint_path)
loss,acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))

1000/1000 [==============================] - 0s 48us/sample - loss: 0.3976 - accuracy: 0.8750

Restored model, accuracy: 87.50%

2.2. 檢查點選項

回調提供了幾個選項,可以為生成的檢查點提供唯一的名稱,并調整檢查點頻率。

訓練一個新模型,每5個周期保存一次唯一命名的檢查點:

# 在文件名中包含周期數. (使用 `str.format`)
checkpoint_path = "training_2/cp-{epoch:04d}.ckpt"
checkpoint_dir = os.path.dirname(checkpoint_path)

cp_callback = tf.keras.callbacks.ModelCheckpoint(
    checkpoint_path, verbose=1, save_weights_only=True,
    # 每5個周期保存一次權重
    period=5)

model = create_model()
model.save_weights(checkpoint_path.format(epoch=0))
model.fit(train_images, train_labels,
          epochs = 50, callbacks = [cp_callback],
          validation_data = (test_images,test_labels),
          verbose=0)

 

 

Epoch 00005: saving model to training_2/cp-0005.ckpt

......

Epoch 00050: saving model to training_2/cp-0050.ckpt

<tensorflow.python.keras.callbacks.History at 0x7efc7c3bbd30>

現在,查看生成的檢查點并選擇最新的檢查點:

#現在,查看生成的檢查點并選擇最新的檢查點:
latest = tf.train.latest_checkpoint(checkpoint_dir)
print(latest)

 

      'training_2/cp-0050.ckpt'

注意:默認的tensorflow格式僅保存最近的5個檢查點。

要測試,請重置模型并加載最新的檢查點:

model = create_model()
model.load_weights(latest)
loss, acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))

 

      1000/1000 [==============================] - 0s 84us/sample - loss: 0.4695 - accuracy: 0.8810

      Restored model, accuracy: 88.10%

3. 這些文件是什么?

上述代碼將權重存儲到檢查點)格式的文件集合中,這些文件僅包含二進制格式的訓練權重.檢查點包含:

· 一個或多個包含模型權重的分片;

· 索引文件,指示哪些權重存儲在哪個分片。

如果您只在一臺機器上訓練模型,那么您將有一個帶有后綴的分片:.data-00000-of-00001

4. 手動保存權重

上面你看到了如何將權重加載到模型中。手動保存權重同樣簡單,使用Model.save_weights方法。

# 保存權重
model.save_weights('./checkpoints/my_checkpoint')
# 加載權重
model = create_model()
model.load_weights('./checkpoints/my_checkpoint')
loss,acc = model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))

5. 保存整個模型

模型和優化器可以保存到包含其狀態(權重和變量)和模型配置的文件中,這允許您導出模型,以便可以在不訪問原始python代碼的情況下使用它。由于恢復了優化器狀態,您甚至可以從中斷的位置恢復訓練。

保存完整的模型非常有用,您可以在TensorFlow.js(HDF5, Saved Model) 中加載它們,然后在Web瀏覽器中訓練和運行它們,或者使用TensorFlow Lite(HDF5, Saved Model)將它們轉換為在移動設備上運行。

5.1. 作為HDF5文件

Keras使用HDF5標準提供基本保存格式,出于我們的目的,可以將保存的模型視為單個二進制blob。

#保存整個模型
#Keras使用HDF5標準提供基本保存格式,出于我們的目的,可以將保存的模型視為單個二進制blob。
model = create_model()
model.fit(train_images, train_labels, epochs=5)
# 保存整個模型到HDF5文件 
model.save('my_model.h5')

現在從該文件重新創建模型:

# 重新創建完全相同的模型,包括權重和優化器
new_model = keras.models.load_model('my_model.h5')
print(new_model.summary())

 

Model: "sequential_6"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense_12 (Dense)             (None, 512)               401920    

_________________________________________________________________

dropout_6 (Dropout)          (None, 512)               0         

_________________________________________________________________

dense_13 (Dense)             (None, 10)                5130      

=================================================================

Total params: 407,050

Trainable params: 407,050

Non-trainable params: 0

_________________________________________________________________

檢查模型的準確率:

#檢查模型的準確率:
loss, acc = new_model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))

1000/1000 [==============================] - 0s 94us/sample - loss: 0.4137 - accuracy: 0.8540

Restored model, accuracy: 85.40%

此方法可保存模型的所有東西:

· 權重值

· 模型的配置(架構)

· 優化器配置

Keras通過檢查架構來保存模型,目前它無法保存TensorFlow優化器(來自tf.train)。使用這些時,您需要在加載后重新編譯模型,否則您將失去優化程序的狀態。

5.2. 作為 saved_model

注意:這種保存tf.keras模型的方法是實驗性的,在將來的版本中可能會有所改變。

創建一個新的模型:

model = create_model()
model.fit(train_images, train_labels, epochs=5)

 

創建saved_model,并將其放在帶時間戳的目錄中:

import time
saved_model_path = "./saved_models/{}".format(int(time.time()))
tf.keras.experimental.export_saved_model(model, saved_model_path)
print(saved_model_path)

 

    './saved_models/1555630614'

從保存的模型重新加載新的keras模型:

new_model = tf.keras.experimental.load_from_saved_model(saved_model_path)
print(new_model.summary())

 

Model: "sequential_7"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

dense_14 (Dense)             (None, 512)               401920    

_________________________________________________________________

dropout_7 (Dropout)          (None, 512)               0         

_________________________________________________________________

dense_15 (Dense)             (None, 10)                5130      

=================================================================

Total params: 407,050

Trainable params: 407,050

Non-trainable params: 0

_________________________________________________________________

運行加載的模型進行預測:

model.predict(test_images).shape

 

 (1000, 10)

new_model.compile(optimizer=model.optimizer,  # keep the optimizer that was loaded
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
# 評估加載后的模型
loss, acc = new_model.evaluate(test_images, test_labels)
print("Restored model, accuracy: {:5.2f}%".format(100*acc))

      1000/1000 [==============================] - 0s 102us/sample - loss: 0.4367 - accuracy: 0.8570

      Restored model, accuracy: 85.70%

 

本實驗利用網上已有的北京房價數據集預測了北京的房價,實現了TensorFlow的線性回歸應用。

上一篇: Python培訓_使用虛擬環境安裝Django

下一篇: 大數據培訓_樸素貝葉斯分類

在線咨詢 ×

您好,請問有什么可以幫您?我們將竭誠提供最優質服務!

<蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>