是否可以根据占位符创建形状?
我有2个用例:
size = tf.placeholder(tf.int32, name="size")
x = tf.placeholder(tf.float32, [None, size], name="x")
和
shapes = tf.placeholder(tf.int32, [None], name="shapes")
tf.contrib.layers.fully_connected(
inputs=x,
num_outputs=shapes[-1]
)
第一个我想我可以用[None, None]
“修复”(在这种情况下不确定性能惩罚)。
对于第二个我不知道?
原因:我想使用Python构建和导出Graph,然后使用Java API读取它以进行训练/预测。我不想为每个隐藏的图层组合准备一个文件,因此我只想导出一个“模板”图形,如下所示:
def fc(x, shape):
return tf.contrib.layers.fully_connected(inputs=x, num_outputs=shape[-1])
def body(x, hidden_layers, i):
# create a FC layer with shape=[hidden_layer[i], hidden_layer[i+1]]
out = fc(x, [tf.slice(hidden_layers, [i], [1]), tf.slice(hidden_layers, [i+1], [1])])
out = tf.tanh(out)
return out, hidden_layers, i + 1
def condition(x, hidden_layers, i):
return i < (len(hidden_layers) - 1)
# i.e. [200,200] or [50,50,50] etc.
hidden_layers = tf.placeholder(tf.int32, [None], "hidden_layers")
# loop counter
i = tf.constant(0, dtype='int32')
# loop creating the network
out = tf.while_loop(condition, body, [x, hidden_layers, i])
然后Java用户只需feed
一个隐藏网络配置的数组。但是在尝试生成图表时,我得到ValueError: ('num_outputs should be int or long, got %s.', <tf.Tensor 'while/fc/Slice_1:0' shape=(1,) dtype=int32>)
。
答案 0 :(得分:0)
不幸的是,我不认为你想要什么是可能的。动态数量的隐藏层会发生什么?随机产生额外(未经训练)的层不是神经网络常见的东西。
也许澄清你的问题会奏效。例如:假设你想要有两个或三个隐藏层,有一些可能性。你可以有两组不同的权重,从第二层到第十层,或从第二层到第三层到第十层。如果你想要这样的东西,请在这个页面上检查tf.cond:https://www.tensorflow.org/api_guides/python/control_flow_ops
祝你好运!