我正在训练一个特征形状为[3751,4]的模型,我想使用Tensorflow中内置的重塑和图层密集功能使输出标签具有形状[1,6]。

现在,我的模型中有两个隐藏层,它们的作用类似于:

input_layer = tf.reshape(features["x"], [-1,11,11,31,4])
first_hidden_layer = tf.layers.dense(input_layer, 4, activation=tf.nn.relu)
second_hidden_layer = tf.layers.dense(first_hidden_layer, 5, activation=tf.nn.relu)
output_layer = tf.layers.dense(second_hidden_layer, 6)


因此,现在我可以将output_layer的形状设为[?,11,11,31,6]。

如何进一步调整训练节点集的形状,使其最终可以将节点连接到形状[1,6]?

最佳答案

形状[3751, 4]无法直接重塑为[-1,11,11,31,4],因为3751*4 = 15004不能被11*11*31*4 = 14964整除。



OP发表评论后进行编辑

您可以展平数据集并将其作为一个示例进行输入。见下文

假设tf.shape(input_feat)==[3751, 4]

input_layer = tf.reshape(input_feat, [1,-1])
first_hidden_layer = tf.layers.dense(input_layer, 4, activation=tf.nn.relu)
second_hidden_layer = tf.layers.dense(first_hidden_layer, 5, activation=tf.nn.relu)
output_layer = tf.layers.dense(second_hidden_layer, 6)




原始答案

由于您使用的是密集层,因此在网络开始时不重塑输入功能将可以很好地工作并提供相似的结果。唯一的区别是图层中的权重会移动位置,但这不会影响您的结果。

如果我们假设tf.shape(input_feat) == [3751, 4],下面的代码段应该可以正常工作

input_layer = tf.identity(input_feat)
first_hidden_layer = tf.layers.dense(input_layer, 4, activation=tf.nn.relu)
second_hidden_layer = tf.layers.dense(first_hidden_layer, 5, activation=tf.nn.relu)
output_layer = tf.layers.dense(second_hidden_layer, 6)

关于python - 在Tensorflow中训练期间如何将[3751,4]数据集密集化并重塑为[1,6]数据集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50477280/

10-12 18:10