为了账号安全,请及时绑定邮箱和手机立即绑定

如何将卷积层添加到自定义估计器

如何将卷积层添加到自定义估计器

汪汪一只猫 2021-07-04 13:01:13
我制作了一个基本的自定义估算器来对短文本进行分类。它几乎是从 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)


查看完整回答
反对 回复 2021-07-06
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信