[英]What does ** (double star/asterisk) and * (star/asterisk) do for parameters?
[英]What does * (asterisk) do when applied to a TensorFlow layer?
目前正在閱讀 Inception-ResNet 的 Python 實現,以幫助用不同的語言(Deeplearning4j)構建模型。 這個實現是 Inception-ResNet-v1,我試圖弄清楚它是如何實現 ResNet 風格的殘差快捷方式的。
在下面的代碼塊是net += scale * up
。
# Inception-Renset-A
def block35(net, scale=1.0, activation_fn=tf.nn.relu, scope=None, reuse=None):
"""Builds the 35x35 resnet block."""
with tf.variable_scope(scope, 'Block35', [net], reuse=reuse):
with tf.variable_scope('Branch_0'):
tower_conv = slim.conv2d(net, 32, 1, scope='Conv2d_1x1')
with tf.variable_scope('Branch_1'):
tower_conv1_0 = slim.conv2d(net, 32, 1, scope='Conv2d_0a_1x1')
tower_conv1_1 = slim.conv2d(tower_conv1_0, 32, 3, scope='Conv2d_0b_3x3')
with tf.variable_scope('Branch_2'):
tower_conv2_0 = slim.conv2d(net, 32, 1, scope='Conv2d_0a_1x1')
tower_conv2_1 = slim.conv2d(tower_conv2_0, 32, 3, scope='Conv2d_0b_3x3')
tower_conv2_2 = slim.conv2d(tower_conv2_1, 32, 3, scope='Conv2d_0c_3x3')
mixed = tf.concat(3, [tower_conv, tower_conv1_1, tower_conv2_2])
up = slim.conv2d(mixed, net.get_shape()[3], 1, normalizer_fn=None,
activation_fn=None, scope='Conv2d_1x1')
net += scale * up
if activation_fn:
net = activation_fn(net)
return net
Scale 是介於 0 和 1 之間的double
精度值。 up
是一堆層,最后一層是 conv2d 層。
scale * up
具體情況是什么?
up
每一層都乘以scale
的標量值。 然后net
被重新定義為net + scale * up
。 所以net
應該與up
具有相同的尺寸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.