我想从Sequential Keras模型中的dropout层中提取和存储每个批次的dropout掩码[1/0数组]。我想知道是否有一种简单的方法在Keras中完成这件事,或者我需要切换到tensorflow (如何在Tensorflow中获取dropout掩码)。
希望得到任何帮助!我对TensorFlow和Keras都很新。
dropout_layer.get_output_mask()和dropout_layer.get_input_mask()是用于dropout层的一些函数,我尝试使用它们,但在调用之前的层后得到了None。
希望得到任何帮助!我对TensorFlow和Keras都很新。
dropout_layer.get_output_mask()和dropout_layer.get_input_mask()是用于dropout层的一些函数,我尝试使用它们,但在调用之前的层后得到了None。
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(name="flat", input_shape=(28, 28, 1)))
model.add(tf.keras.layers.Dense(
512,
activation='relu',
name = 'dense_1',
kernel_initializer=tf.keras.initializers.GlorotUniform(seed=123),
bias_initializer='zeros'))
dropout = tf.keras.layers.Dropout(0.2, name = 'dropout') #want this layer's mask
model.add(dropout)
x = dropout.output_mask
y = dropout.input_mask
model.add(tf.keras.layers.Dense(
10,
activation='softmax',
name='dense_2',
kernel_initializer=tf.keras.initializers.GlorotUniform(seed=123),
bias_initializer='zeros'))
model.compile(...)
model.fit(...)
Lambda(getMask)(outputs)
中获取mask
吗?我假设Lambda层将出现在模型摘要中(但实际上没有),我可以使用model.layer.output[0]
来获取它吗?我需要进行回调以提取掩码变量吗?还是我错过了一些明显的东西?(我正在使用tensorflow 2.0)再次感谢您的帮助! - holighosty_train
必须是一个列表[y_train_main_output, y_train_mask]
。因此,你可以创建一个仅用于预测的带有掩码的单独模型,或者为该输出传递虚拟目标,并定义虚拟损失。 - Daniel Möller