我正在制作解决回归问题的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)
答案 0 :(得分:1)
正如Dimitiry所说,我忘了把它弄平......你也可以在调用lost func laster之前使用tf.squeeze
函数。