【发布时间】:2019-08-24 10:17:40
【问题描述】:
我需要编写一个 build-cnn 函数,它在卷积神经网络中构建所有层,还包括正则化技术,例如 Dropout 和 Batch Normalization。
基本上,我一次只能试验一种正则化技术,以查看 dropout 和 batch norm 之间的性能差异。因此,在创建模型时:
mynewmodel = MyModel(name="network", num_classes=len(classes),
feature_maps = 32, keep_prob = 0.5, batch_norm = None,
optimizer="adam",learning_rate = 0.001)
在上面,它正在创建使用 dropout 而不是 batch normalisation 的模型。如果 keep_prob 的值是不是 1,那么它使用 dropout。 dropout 和 batch norm 不能同时使用。
我现在面临的问题是我只需要做的 build-cnn 功能,
def my_cnn(self,x,reuse = False, name):
with tf.variable_scope(name, reuse=reuse):
conv1 = tf.nn.conv2D(.....)
if self.batch_norm != None: #if None then don't use batch normalization
conv1 = tf.layers.batch_normalization(...)
if self.keep_prob != 1: #if 1 then don't use dropout
conv1 = tf.nn.dropout(...)
如果我在这种情况下包含 batch norm 和 dropout 层 的 if 语句 是否正确,具体取决于哪种正则化技术正在使用吗?
由于keep_prob为0.5,batch_norm为None,所以只会在cnn中创建dropout层。
【问题讨论】:
标签: tensorflow machine-learning deep-learning conv-neural-network