在Tensorflow中获得未知张量的形状

时间:2017-11-19 16:38:44

标签: python machine-learning tensorflow neural-network

我正在尝试为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>形状。

如何将一批Integer传递给Tensorflow并获得它的第二维(一个热矢量的长度)?我不希望明确地将输入的大小传递给dense()

1 个答案:

答案 0 :(得分:1)

我发现,如果我像这样定义我的占位符:

input_state = tf.placeholder(tf.int64, shape=[None], name="input_state")
我犯了一个非常愚蠢的错误。正确的形状为[None]而不是(None),因为(None)相当于None,这意味着“任何形状”。

如果占位符的形状正确,则state_oh的形状将为(?, 16)