【发布时间】:2020-01-02 09:32:58
【问题描述】:
我在 tensorflow 中注意到,control_dependencies 很重要,我们需要注意它。
尽管如此,当我用 tensorflow keras 实现模型时,我注意到如果我不添加control_dependencies,似乎还是可以的。
例如,假设我有一个具有 4 层 LSTM 的模型,如下所示:
import numpy as np
sequence_input = tf.keras.layers.Input(dtype='int32', shape=(3,))
embedding_output = tf.keras.layers.Embedding(input_dim=100, output_dim=5, input_length=10)(sequence_input)
lstm_output = tf.keras.layers.LSTM(10, return_sequences=True)(embedding_output)
lstm_output = tf.keras.layers.LSTM(10, return_sequences=True)(lstm_output)
lstm_output = tf.keras.layers.LSTM(10, return_sequences=True)(lstm_output)
lstm_output = tf.keras.layers.LSTM(10, return_sequences=False)(lstm_output)
output = tf.keras.layers.Activation('sigmoid')(lstm_output)
model = tf.keras.models.Model(inputs=[sequence_input], outputs=output)
print(model.summary())
sequence_input = np.random.randint(100, size=(5, 3))
print(model.predict([sequence_input]))
在这里,我在嵌入层之上有 4-lstm 层。输出是正常的 sigmoid 激活。有了这个我认为模型的实现是正确的。
但是,我认为我应该使用 control_dependencies 来实现这一点,如下所示:
import numpy as np
sequence_input = tf.keras.layers.Input(dtype='int32', shape=(3,))
embedding_output = tf.keras.layers.Embedding(input_dim=100, output_dim=5, input_length=10)(sequence_input)
lstm_output = tf.keras.layers.LSTM(10, return_sequences=True)(embedding_output)
with tf.control_dependencies([lstm_output]):
lstm_output = tf.keras.layers.LSTM(10, return_sequences=True)(lstm_output)
with tf.control_dependencies([lstm_output]):
lstm_output = tf.keras.layers.LSTM(10, return_sequences=True)(lstm_output)
with tf.control_dependencies([lstm_output]):
lstm_output = tf.keras.layers.LSTM(10, return_sequences=False)(lstm_output)
with tf.control_dependencies([lstm_output]):
output = tf.keras.layers.Activation('sigmoid')(lstm_output)
model = tf.keras.models.Model(inputs=[sequence_input], outputs=output)
print(model.summary())
sequence_input = np.random.randint(100, size=(5, 3))
print(model.predict([sequence_input]))
尽管如此,代码在两种情况下运行良好,我认为在两种情况下实现也是正确的。
因此,我的问题是:我们是否需要在 tf keras 中声明 control_dependencies。另外,如果不是 - 为什么我们不需要在 tf.keras 中使用 control_dependencies?
谢谢
【问题讨论】:
标签: tensorflow keras deep-learning