Python 如何在Tensorflow中的训练期间将[3751,4]数据集加密并重塑为[1,6]数据集

Python 如何在Tensorflow中的训练期间将[3751,4]数据集加密并重塑为[1,6]数据集,python,tensorflow,machine-learning,tensorflow-datasets,Python,Tensorflow,Machine Learning,Tensorflow Datasets,我正在训练一个模型,其特征形状为[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.

我正在训练一个模型,其特征形状为[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)
现在我可以得到输出层的形状[?,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)

谢谢你的回复。3751*4=15004。另外,您提供的代码片段最终会给出[3751,6]的形状,而我实际上需要[1,6]。我明白了。因此,应将整个数据集视为一个单一输入示例:您可以通过修改to
[1,-1]
(请参见编辑)来完成此操作。