我正在尝试为 OpenAI 健身房实现简单的 Q-Network。我有状态占位符。状态以整数表示。我想要一个单热向量。所以,我这样做:
input_state = tf.placeholder(tf.int64, shape=(None))
state_oh = tf.one_hot(input_state, env.observation_space.n)
我正在使用(None
)除了()
因为我想将批处理传递给训练网络。
我预计,state_oh
形状如(None, 16)
,但我得到了 <unknown>
。这对我来说是一个问题,因为我实现了创建全连接层的函数,它使用 tensor.shape
确定输入张量的形状。 :
def dense(x, output_size, activation, name=None):
with tf.name_scope(name, "dense", [x]):
w = tf.Variable(tf.random_normal([input_size, output_size]), name="w")
b = tf.Variable(tf.random_normal([1, output_size]), name="b")
layer = tf.matmul(x, w) + b
layer_act = activation(layer)
return layer_act
这不适用于 <unknown>
形状。
如何将一批整数传递给 Tensorflow 并获取它的第二维(one-hot 向量的长度)?我不想将输入的大小传递给 dense()
明确地。
最佳答案
我发现,如果我像这样定义占位符:
input_state = tf.placeholder(tf.int64, shape=[None], name="input_state")
我犯了一个非常愚蠢的错误。正确的形状是 [None]
而不是 (None)
,因为 (None)
相当于 None
,这意味着“任何形状”。
如果占位符的形状正确,state_oh
的形状将如预期的那样为 (?, 16)
。
关于python - 在 Tensorflow 中获取未知张量的形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47379246/