def resBlock(inputs, input_num, output_num, kernel_size, resample=None):
"""
resample: None, 'down', or 'up'
"""
if resample == 'down':
conv_shortcut = functools.partial(tcl.conv2d, stride=2)
conv_1 = functools.partial(tcl.conv2d, num_outputs=input_num/2)
conv_1b = functools.partial(tcl.conv2d, num_outputs=output_num/2, stride=2)
conv_2 = functools.partial(tcl.conv2d, num_outputs=output_num)
elif resample == 'up':
conv_shortcut = subpixelConv2D
conv_1 = functools.partial(tcl.conv2d, num_outputs=input_num/2)
conv_1b = functools.partial(tcl.conv2d_transpose, num_outputs=output_num/2, stride=2)
conv_2 = functools.partial(tcl.conv2d, num_outputs=output_num)
elif resample == None:
conv_shortcut = tcl.conv2d
conv_1 = functools.partial(tcl.conv2d, num_outputs=input_num/2)
conv_1b = functools.partial(tcl.conv2d, num_outputs=output_num/2)
conv_2 = functools.partial(tcl.conv2d, num_outputs=output_num)
else:
raise Exception('invalid resample value')
if output_num==input_num and resample==None:
shortcut = inputs # Identity skip-connection
else:
shortcut = conv_shortcut(inputs=inputs, num_outputs=output_num, kernel_size=1) # Should kernel_size be larger?
output = inputs
output = conv_1(inputs=output, kernel_size=1)
output = conv_1b(inputs=output, kernel_size=kernel_size)
output = conv_2(inputs=output, kernel_size=1, biases_initializer=None) # Should skip bias here?
# output = Batchnorm(name+'.BN', [0,2,3], output) # Should skip BN op here?
return shortcut + (0.3*output)
# use depth-to-space for upsampling image
评论列表
文章目录