我目前正在研究网络实现RCNN的论文。
RCNN 中的核心模块是循环卷积层(RCL),其状态在离散的时间步长上演变。
该网络类似于 ResNet。
每个 RCL 块都被定义为...
def RCL(feed_forward_input,num_of_filter, filtersize, alpha,pool):
conv = Conv2D(filters=num_of_filter, kernel_size=filtersize, padding='same')
recurrent_input = conv(feed_forward_input) #Yes I could have used a less confusing name...
merged = add([feed_forward_input,recurrent_input])
conv_relu = Activation(create_relu_advanced(alpha_val=alpha))(merged)
conv_relu_batchnorm = BatchNormalization()(conv_relu)
if pool:
conv_relu_batchnorm_pool = MaxPooling2D()(conv_relu_batchnorm)
return conv_relu_batchnorm_pool
else:
return conv_relu_batchnorm
我不明白为什么批量标准化是在最后而不是在开始时进行的?标准化输入是否有意义?对输入进行归一化是有意义的,但是对每一层的输出进行归一化有意义吗?
我猜让我感到困惑的是,它通常在开始时使用,所以在最后这样做似乎有点......不寻常?- 如here和here以及here所述。
是两个非线性函数的组合。内部的可以是传统的 sigmoid 函数或整流线性单元 (ReLU) [21] 。与使用 sigmoid 函数相比,具有 ReLU 的模型通常收敛速度更快,并且往往获得更好的性能。然而,更快的收敛带来了“梯度爆炸”的问题,这需要更小的学习率和必要的归一化。外部函数表示适当的归一化函数。这里采用批量归一化方法[14]
它是在 Relu 之后完成的……奇怪吗?.
