首先应注意batch_normalization的位置,一般是在conv之后,激活函数之前。
那么如何在自己的网络结构里插入bn呢?
net = Conv2dLayer(net_in,
act=tf.identity,
shape=(3, 3, 3, 32),
strides=(1, 1, 1, 1),
padding='SAME',
name='conv_1')
net = MaxPool2d(net,
filter_size=(2, 2),
padding='SAME',
name='maxpool_1')
net = BatchNormLayer(net, is_train_bn, name='batchNorm_1', act=tf.nn.relu)
上述代码conv2dlayer中的激活函数为tf.identiy,其作用简单来说将tensor变量转化为graph上的一个节点,实际上并没有真正起到类似于relu、tanh等函数作用。
最终在bachnolayer后使用激活函数relu。