通过张量流管道将输入张量大小传递给

时间:2018-10-07 17:16:45

标签: tensorflow tensorflow-datasets

我遇到以下错误

ValueError:Dense的输入的最后维度应定义。找到了None

使用tf.data管道将张量传递到tf.layers.dense时。我的代码的相关部分是:

def _parse_function(example_proto):
    features = {'X': tf.VarLenFeature(tf.float32),
                'Y': tf.VarLenFeature(tf.float32)}
    parsed_features = tf.parse_example(example_proto, features)
    X = tf.sparse_tensor_to_dense(parsed_features['X'])
    Y = tf.sparse_tensor_to_dense(parsed_features['Y'])
    return X, Y

dataset = tf.data.TFRecordDataset(fin)
dataset = dataset.batch(100)
dataset = dataset.map(_parse_function)
dataset = dataset.cache()
dataset = dataset.repeat()
iterator = dataset.make_one_shot_iterator()
X, Y = iterator.get_next()

hidden_0 = tf.layers.dense(X, N_HIDDEN_0, activation=tf.nn.crelu, use_bias=False)

这是因为使用VarLenFeature或sparse_tensor_to_dense操作无法将张量形状传递到tf.layers.dense吗?有没有一种方法可以解决此问题,而无需使用sess.run(X,Y)并使用feed_dict来提供输出?

我想知道这是否类似于@mrry在https://github.com/tensorflow/tensorflow/issues/13348中解决的问题。

任何见解将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:0)

我想出了如何通过将def _parse_function更改为以下内容来解决该问题的方法:

def _parse_function(example_proto):
    features = {'X': tf.FixedLenFeature([18],tf.float32), 'Y': tf.FixedLenFeature([3],tf.float32)}
    parsef = tf.parse_example(example_proto, features)
    return parsef['X'], parsef['Y']

所以我想问题是因为在我的原始代码中使用tf.VarLenFeature,输入和输出节点的数量无法传达到tf.layers.dense。我仍然不清楚为什么我必须指定X和Y的列数(在上面的代码中分别为[18]和[3]),而不是将它们指定为[]-但我可以接受。 >