tf.layers.Dense之后的张量形状?

时间:2018-03-14 13:02:54

标签: python arrays tensorflow deep-learning regression

我正在制作解决回归问题的DNN。

首先,我加载一个预先训练好的VGG16网络,而不是制作一些完全连接的隐藏层。最后一层有一个输出标量的节点。

我认为输出的形状类似于[batch_size]或[batch_size,1]。

但是当我打电话时......

...

fc5 = tf.layers.dense(inputs=fc4, units=1)

print(tf.shape(fc5))
print(fc5.get_shape())

......我明白了:

>张量(“形状:0”,形状=(4,),dtype = int32)

> (?,?,?,1)

有人可以解释一下吗?为什么形状具有前三个维度,tf.layers.dense不应该将其设为标量或标量列表?

修改

vgg_layer7_out形状:

>张量(“形状:0”,形状=(4,),dtype = int32)

> (?,?,?,4096)

fc1形状:

>张量(“形状:0”,形状=(4,),dtype = int32)

> (?,?,?,1024)

...

fc4形状:

>张量(“形状:0”,形状=(4,),dtype = int32)

> (?,?,?,10)

fc图层代码:

fc1 = tf.layers.dense(inputs=vgg_layer7_out, units=1024, activation=tf.nn.elu, bias_initializer=init, kernel_initializer=init, kernel_regularizer=reg, bias_regularizer=reg)

drop1 = tf.nn.dropout(fc1, keep_prob)

fc2 = tf.contrib.layers.fully_connected(drop1, 128, activation_fn=tf.nn.elu, weights_initializer=init, weights_regularizer=reg)

drop2 = tf.nn.dropout(fc2, keep_prob)

fc3 = tf.contrib.layers.fully_connected(drop2, 50, activation_fn=tf.nn.elu, weights_initializer=init, weights_regularizer=reg)

drop3 = tf.nn.dropout(fc3, keep_prob)

fc4 = tf.contrib.layers.fully_connected(drop3, 10, activation_fn=tf.nn.elu, weights_initializer=init, weights_regularizer=reg)

drop2 = tf.nn.dropout(fc4, keep_prob)

fc5 = tf.layers.dense(inputs=drop2, units=1, activation=None)

1 个答案:

答案 0 :(得分:1)

正如Dimitiry所说,我忘了把它弄平......你也可以在调用lost func laster之前使用tf.squeeze函数。