将张量流中的3级张量重塑为2级,以在完全连接的层中使用它

时间:2018-08-16 14:08:31

标签: python tensorflow conv-neural-network

我做了很多搜索,然后尝试,但是没有找到下一个问题的解决方案:

我正在研究神经网络模型以测试句子的分类。这些句子以[rows, words_encoded_by_word2vec]格式表示。第一个网络-完全连接完成。在第二个模型中,我试图在密集层之前添加一个conv1d和一个max_pool1d层。这些层需要[batch_size, length, channel]格式的张量。好。这不是问题,已经解决了。 /我只有1个频道/

但是,由于未知的batch_size,很难在完全连接的层和最大池层之间建立连接。

self.X = tf.placeholder(tf.float32, shape=(None, self.n_inputs, 1), name="input")

self.convolution = tf.nn.conv1d(self.X, self.filter, stride=50, adding="SAME")
self.max_pool = tf.layers.max_pooling1d(self.convolution, pool_size=2, strides=1, padding="SAME")
self.tensor_vector = tf.reshape(tensor=self.max_pool, shape=(-1, tf.shape(self.max_pool)[1]*tf.shape(self.max_pool)[2]))

这有效,但是密集层不接受它,并给出错误:

ValueError: The last dimension of the inputs to `Dense` should be defined. Found `None`.

特定的致密层:

hiddens.append(dropout(fully_connected(self.tensor_vector, layers[0], scope="hidden0",weights_initializer=tf.contrib.layers.xavier_initializer(),biases_initializer=tf.random_uniform_initializer(-0.1,0.1)), self.keep_prob, is_training=self.is_training))  

是否有可能调和这两种格式?任何帮助将不胜感激:)

坦克。

1 个答案:

答案 0 :(得分:0)

我找到了可以用于我的特定问题的答案。 tf.squeeze()可以删除尺寸为1的尺寸(不建议使用的尺寸)。这正是我要删除的频道。这种转变对我来说很成功。

但是我认为这些形状问题在张量流开发中很普遍,因此,如果有针对这些问题的适配器,那就太好了。

相关问题