簡體   English   中英

使用不同tf設備的keras訓練模型

[英]keras trained model using different tf device

我正在使用訓練有素的模型keras 該模型不適用於GPU內存,因此我想將其分為CPU和GPU,以及可能在不同機器上的GPU上。

1)因此,如果我想在我的CPU上獲取所有tf.variable並在GPU上進行計算,該怎么做。 因為一些文章顯示我們可以將tf.variable放置在CPU上並將計算放置在GPU上。 (我正在談論一個預先訓練的keras model )。

2)如果我想將預訓練模型的各層分離到不同機器上的不同GPU中。 with tf.device一起使用是否正確,然后將圖層添加到我的序列模型中,是否正確?

vgg16_model = keras.applications.vgg16.VGG16()
cnnModel = Sequential()

for layer in vgg16_model.layers[0:13]:
    cnnModel.add(layer)
for layer in vgg16_model.layers[14:16]:
    cnnModel.add(layer)
for layer in vgg16_model.layers[17:21]:
    cnnModel.add(layer)

with tf.device(........):
   cnnModel.add(Dense(2048, name="compress_1"))
   cnnModel.add(Dense(1024, name="compress_2"))
   cnnModel.add(Dense(512, name="compress_3"))

with tf.device(........):
    model = Sequential()
    model.add(keras.layers.TimeDistributed(cnnModel,input_shape=(10,224,224,3),name="CNN_Model"))

with tf.device(........):
    model.add(keras.layers.LSTM(256,name="lstm1",return_sequences=True))
    model.add(keras.layers.LSTM(128,name="lstm2",return_sequences=True))
    model.add(keras.layers.Flatten())
    model.add(keras.layers.Dense(528))
    model.add(keras.layers.Dense(64))
    model.add(keras.layers.Dense(39,activation='sigmoid'))

非常感謝你。

更新我在考慮是否可以訪問模型的張量變量中的屬性variable_device並將其自行設置給CPU。

順便說一句,我正在使用tf.keras實現。

我嘗試了Update2在張量板上,我可以看到以下內容: 在此處輸入圖片說明 在此處輸入圖片說明

在此處輸入圖片說明

這是否意味着計算和訓練在CPU中,數據在GPU中?

是的,這就是這樣做的方式。

請注意,因為在CPU和GPU以及其他計算機之間復制變量需要時間。 如果不使用GPU,使用一台計算機或僅在完成多個批次后才在計算機之間同步變量,您可能會獲得更高的性能(異步SGD)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM