我遇到以下错误
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中解决的问题。
任何见解将不胜感激!
谢谢!
答案 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]),而不是将它们指定为[]-但我可以接受。 >