[英]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實現。
這是否意味着計算和訓練在CPU中,數據在GPU中?
是的,這就是這樣做的方式。
請注意,因為在CPU和GPU以及其他計算機之間復制變量需要時間。 如果不使用GPU,使用一台計算機或僅在完成多個批次后才在計算機之間同步變量,您可能會獲得更高的性能(異步SGD)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.