Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow 使用keras卷积1D层时的负尺寸误差_Tensorflow_Machine Learning_Neural Network_Keras_Conv Neural Network - Fatal编程技术网

Tensorflow 使用keras卷积1D层时的负尺寸误差

Tensorflow 使用keras卷积1D层时的负尺寸误差,tensorflow,machine-learning,neural-network,keras,conv-neural-network,Tensorflow,Machine Learning,Neural Network,Keras,Conv Neural Network,我正在尝试使用Keras创建一个char cnn。这种类型的cnn需要使用卷积1D层。但我尝试将它们添加到模型中的所有方法,都会在创建阶段给我带来错误。这是我的密码: def char_cnn(n_vocab,max_len,n_classes): conv_层=[[256,7,3], [256, 7, 3], [256,3,无], [256,3,无], [256,3,无], [256, 3, 3]] 完全_层=[1024,1024] th=1e-6 嵌入大小=128 输入=输入(shape=(

我正在尝试使用Keras创建一个char cnn。这种类型的cnn需要使用
卷积1D
层。但我尝试将它们添加到模型中的所有方法,都会在创建阶段给我带来错误。这是我的密码:

def char_cnn(n_vocab,max_len,n_classes):
conv_层=[[256,7,3],
[256, 7, 3],
[256,3,无],
[256,3,无],
[256,3,无],
[256, 3, 3]]
完全_层=[1024,1024]
th=1e-6
嵌入大小=128
输入=输入(shape=(最大长度),name='sent\u Input',dtype='int64')
#嵌入层
x=嵌入(n_vocab,嵌入大小,输入长度=最大长度)(输入)
#卷积层
对于conv_层中的cl:
x=卷积1d(cl[0],cl[1])(x)
x=阈值德雷卢(th)(x)
如果不是,则cl[2]为无:
x=MaxPoolg1d(cl[2])(x)
x=展平()(x)
#完全连接层
对于全层中的fl:
x=密度(fl)(x)
x=阈值德雷卢(th)(x)
x=辍学率(0.5)(x)
预测=密集(n_类,激活='softmax')(x)
模型=模型(输入=输入,输出=预测)
compile(优化器='adam',loss='classifical\u crossentropy')
回归模型
这是我在尝试调用
char\u cnn
函数时收到的错误

InvalidArgumentError回溯(最近一次调用上次)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/common\u shapes.py in\u call\u cpp\u shape\u fn\u impl(op,需要输入张量,需要输入张量,需要输入张量,需要形状)
685图形版本、节点、输入形状、输入张量、,
-->686输入\u张量\u作为\u形状、状态)
687错误除外。InvalidArgumentError作为错误:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/errors\u impl.py in\uuuuuuuuu exit\uuuuuuuu(self、type\u arg、value\u arg、traceback\u arg)
515 compat.as_text(c_api.TF_消息(self.status.status)),
-->516 c_api.TF_GetCode(self.status.status))
517#从内存中删除基础状态对象,否则它将保持活动状态
InvalidArgumentError:输入形状为:[?、1,1256]、[1,3256256]的“conv1d_26/卷积/Conv2D”(op:“Conv2D”)从1中减去3导致的负维度大小。

如何修复它?

您的下采样太过激进,这里的关键参数是
max\u len
:当它太小时,序列变得太短,无法执行卷积或最大池。您设置了
pool\u size=3
,因此在每次池化之后,它会将序列收缩一个因子
3
(参见下面的示例)。我建议你试试
pool\u size=2

此网络可以处理的最小
max_len
max_len=123
。在这种情况下,
x
形状按以下方式变换(根据
conv\u层
):

设置较小的值,如
max_len=120
会导致
x.shape=(?,4,256)
位于最后一层之前,并且无法执行此操作

(?, 123, 128)
(?, 39, 256)
(?, 11, 256)
(?, 9, 256)
(?, 7, 256)
(?, 5, 256)