我正在尝试实施用于半监督学习的PI模型 在[1]中介绍。
要计算损失函数,两个正向通过网络 需要相同的数据,从而在每次正向传递中使用数据进行修改 随机扩张。 另外,使用了丢失,并且在两次通过中的每一次 应该放弃不同的神经元选择。
我不太确定如何实现所需的丢失机制。
当我将两个不同的增强批次连接为我的网络的输入时,
这样一个批次现在包含两种不同的数据增强。
是否有可能添加两个" parallel"需要丢失层的tf.nn.dropout
个图层,并以某种方式为前半部分定义
第一个应该使用批次,第二个应该使用第二个批次?
然后再次拆分网络的输出应该给出结果
两个"分开"运行。
另一种方法是真正使用两个单独的session.run
来电,
有两种不同的数据增强。但是,我不太确定
然后我可以如何正确执行渐变更新。
答案 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 )