如何在Tensorflow训练期间将[3751,4]数据集密集并重新整形为[1,6]数据集

时间:2018-05-22 22:25:58

标签: python tensorflow machine-learning tensorflow-datasets

我正在训练一个特征形状为[3751,4]的模型,并且我想使用Tensorflow中内置的重塑和层密函数来使输出标签具有[1,6]的形状。 / p>

现在我在我的模型中有两个隐藏层,它们将执行以下操作:

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)

所以现在我可以得到[?,11,11,31,6]的output_layer形状。

如何进一步塑造训练节点集,以便最终将节点连接到形状[1,6]?

1 个答案:

答案 0 :(得分:1)

形状[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)