# 需要导入模块: import tensorflow [as 别名]
# 或者: from tensorflow import variable_op_scope [as 别名]
def fractal_template(inputs,
num_columns,
block_fn,
block_asc,
joined=True,
is_training=True,
reuse=False,
scope=None):
"""Template for making fractal blocks.
Given a function and a corresponding arg_scope `fractal_template`
will build a truncated fractal with `num_columns` columns.
Args:
inputs: a 4-D tensor `[batch_size, height, width, channels]`.
num_columns: integer, the columns in the fractal.
block_fn: function to be called within each fractal.
block_as: A function that returns argscope for `block_fn`.
joined: boolean, whether the output columns should be joined.
reuse: whether or not the layer and its variables should be reused. To be
able to reuse the layer scope must be given.
scope: Optional scope for `variable_scope`.
"""
def fractal_expand(inputs, num_columns, joined):
'''Recursive Helper Function for making fractal'''
with block_asc():
output = lambda cols: join(cols, coin) if joined else cols
if num_columns == 1:
return output([block_fn(inputs)])
left = block_fn(inputs)
right = fractal_expand(inputs, num_columns-1, joined=True)
right = fractal_expand(right, num_columns-1, joined=False)
cols=[left]+right
return output(cols)
with tf.variable_op_scope([inputs], scope, 'Fractal',
reuse=reuse) as scope:
coin = coin_flip()
net=fractal_expand(inputs, num_columns, joined)
return net