Tensorflow针对一个渐变更新的不同丢失配置

时间:2018-04-25 18:25:38

标签: python tensorflow keras

我正在尝试实施用于半监督学习的PI模型 在[1]中介绍。

要计算损失函数,两个正向通过网络 需要相同的数据,从而在每次正向传递中使用数据进行修改 随机扩张。 另外,使用了丢失,并且在两次通过中的每一次 应该放弃不同的神经元选择。

我不太确定如何实现所需的丢失机制。

当我将两个不同的增强批次连接为我的网络的输入时, 这样一个批次现在包含两种不同的数据增强。 是否有可能添加两个" parallel"需要丢失层的tf.nn.dropout个图层,并以某种方式为前半部分定义 第一个应该使用批次,第二个应该使用第二个批次? 然后再次拆分网络的输出应该给出结果 两个"分开"运行。

另一种方法是真正使用两个单独的session.run来电, 有两种不同的数据增强。但是,我不太确定 然后我可以如何正确执行渐变更新。

[1] https://arxiv.org/abs/1610.02242

1 个答案:

答案 0 :(得分:0)

您可以使用tf.split()将批处理分成两半,分别通过tf.layers.dropout()提取每一半,然后使用tf.concat()重新连接它们。像这样的东西(伪代码):

splitted = tf.split( batch, 2, axis = 0 )
first_half = tf.dropout( splitted[ 0 ], rate = 0.5 )
second_half = tf.dropout( splitted[ 1 ], rate = 0.6 ) 
rejoined = tf.concatenate( [ first_half, second_half ], axis = 0 )