我制作了一个基本的自定义估算器来对短文本进行分类。它几乎是从 www.tensorflow.org 上的教程中提取的,几乎没有小改动,主要是为了更容易调整。特征列是 categorical_column_with_hashbucket,包裹在 embedding_column 中。https://www.tensorflow.org/api_docs/python/tf/feature_column/categorical_column_with_hash_buckethttps://www.tensorflow.org/api_docs/python/tf/feature_column/embedding_column达到后,我认为是在测试数据集上大约 0.6 精度的最佳性能。我决定从 Tensorflow 库中添加一维卷积层。https://www.tensorflow.org/api_docs/python/tf/layers/conv1d不幸的是,文档没有指定它需要 3 维张量作为输入。如果我只是使用 input_layer 作为输入,例如这样:net = tf.layers.conv1d(net,filters=1,kernel_size=1)我得到以下异常:ValueError: Input 0 of layer conv1d_1 is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [None, 1024]顺便说一句,1024 是嵌入维度,但不管它有多大,反正进程会崩溃。我可以扩展张量,像这样添加维度:more_dim = tf.expand_dims(input=net,axis=-1)net = tf.layers.conv1d(more_dim,filters=1,kernel_size=1)但这只会给我另一个例外,这次是在计算 softmax 交叉熵损失时:ValueError("Can not squeeze dim[2], expected a dimension of 1, got 18 for 'sparse_softmax_cross_entropy_loss/remove_squeezable_dimensions/Squeeze' (op: 'Squeeze') with input shapes: [?,1024,18].",)最后一个维度 18 是标签的数量。我可以再次调整张量的大小。但我觉得这可能是浪费时间。而且由于我公认的幼稚方法行不通。我不得不问,如何正确地做到这一点。
1 回答
梵蒂冈之花
TA贡献1900条经验 获得超5个赞
我认为 Tensorflow 需要额外的通道维度。尝试
net = tf.expand_dims(net, -1) # Adding a channel as last dimension. net = tf.layers.conv1d(net,filters=1,kernel_size=1)
添加回答
举报
0/150
提交
取消