Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.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
Python 3.x 在keras中添加密集层时出错_Python 3.x_Deep Learning_Keras_Conv Neural Network - Fatal编程技术网

Python 3.x 在keras中添加密集层时出错

Python 3.x 在keras中添加密集层时出错,python-3.x,deep-learning,keras,conv-neural-network,Python 3.x,Deep Learning,Keras,Conv Neural Network,我试图实现一个简单的Keras猫对狗分类器,但在添加一个密集层时,它返回一个值错误。 我正在使用theano作为后端。 代码如下: from keras.models import Sequential from keras.layers import Conv2D from keras.layers import MaxPooling2D from keras.layers import Flatten from keras.layers import Dense classifier =

我试图实现一个简单的Keras猫对狗分类器,但在添加一个密集层时,它返回一个值错误。 我正在使用theano作为后端。 代码如下:

from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense

classifier = Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation = 'relu'))
下面是模型的摘要

在执行最后一行(添加密集层)时,我得到以下错误:

ValueError: ('The specified size contains a dimension with value <= 0', (-448, 128))
我找不到问题所在


提前谢谢

我运行了上面的代码,得到的摘要与您的不同

你应该提供更多的信息,比如你使用的keras版本和后端

我怀疑您的keras.json文件中有问题

从开始,检查keras.json文件(位于主目录.keras/keras.json中)

应该是这样的

{
“图像数据格式”:“最后一个通道”,
“图像尺寸排序”:“tf”,
“ε”:1e-07,
“floatx”:“float32”,
“后端”:“tensorflow”
}

{
“图像数据格式”:“最后一个通道”,
“图像尺寸排序”:“th”,
“ε”:1e-07,
“floatx”:“float32”,
“后端”:“theano”
}

我运行了上面的代码,得到的摘要与您的不同

你应该提供更多的信息,比如你使用的keras版本和后端

我怀疑您的keras.json文件中有问题

从开始,检查keras.json文件(位于主目录.keras/keras.json中)

应该是这样的

{
“图像数据格式”:“最后一个通道”,
“图像尺寸排序”:“tf”,
“ε”:1e-07,
“floatx”:“float32”,
“后端”:“tensorflow”
}

{
“图像数据格式”:“最后一个通道”,
“图像尺寸排序”:“th”,
“ε”:1e-07,
“floatx”:“float32”,
“后端”:“theano”
}

如果要跨通道维度进行卷积,请尝试在卷积和池中显式设置
数据格式
参数,如下所示:

classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu', data_format='channels_last'))
classifier.add(Conv2D(32, (3, 3), activation = 'relu', data_format='channels_last'))
classifier.add(MaxPooling2D(pool_size = (2, 2), data_format='channels_last'))
或者重塑数据,使其具有形状
(3、64、64)

简单来说,卷积的工作原理大致如下图所示:

您可以看到,灰色过滤器跨过图像的像素(蓝色),以提取所谓的局部模式(绿色)。理想情况下,应沿图像的宽度和高度(即数据中的两个64维)应用此过滤器。
当我们按照惯例在通道中分割图像时,这也特别有用,通常用于表示它们的RGB组件。在这种情况下,gif中显示的相同过程并行应用于三个通道,并且通常可应用于N个任意通道。此图像应有助于澄清:

长话短说,打电话时:

 classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

默认情况下,Keras认为您正在传递一个64个通道的64 x 3图像,并尝试相应地进行卷积。这显然是错误的,并导致负维(注意卷积如何缩小图像的大小)。通过指定
'channels\u last'
格式,您可以告诉Keras图像的方向(组件维度位于最后一个“位置”),以便它能够在64 x 64图像之间正确卷积

如果要跨通道维度进行卷积,请尝试在卷积和池中显式设置
data\u format
参数,如下所示:

classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu', data_format='channels_last'))
classifier.add(Conv2D(32, (3, 3), activation = 'relu', data_format='channels_last'))
classifier.add(MaxPooling2D(pool_size = (2, 2), data_format='channels_last'))
或者重塑数据,使其具有形状
(3、64、64)

简单来说,卷积的工作原理大致如下图所示:

您可以看到,灰色过滤器跨过图像的像素(蓝色),以提取所谓的局部模式(绿色)。理想情况下,应沿图像的宽度和高度(即数据中的两个64维)应用此过滤器。
当我们按照惯例在通道中分割图像时,这也特别有用,通常用于表示它们的RGB组件。在这种情况下,gif中显示的相同过程并行应用于三个通道,并且通常可应用于N个任意通道。此图像应有助于澄清:

长话短说,打电话时:

 classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

默认情况下,Keras认为您正在传递一个64个通道的64 x 3图像,并尝试相应地进行卷积。这显然是错误的,并导致负维(注意卷积如何缩小图像的大小)。通过指定
'channels\u last'
格式,您可以告诉Keras图像的方向(组件维度位于最后一个“位置”),以便它能够在64 x 64图像之间正确卷积

您正在使用哪个后端?@MatiasValdenegro我正在使用后端作为您正在使用的后端?@MatiasValdenegro我正在使用后端作为theano@loannis我尝试将代码更改为“image\u dim\u ordering”:“th”,但没有成功。默认情况下,它是
{“backend”:“theano”,“image\u data\u format”:“channels\u last”,“floatx”:“float32”,“epsilon”:1e-07}
@loannis我尝试将代码更改为“image\u dim\u ordering”:“th”,但没有成功。默认情况下,它是
{“backend”:“theano”,“image\u data\u format”:“channels\u last”,“floatx”:“float32”,“epsilon”:1e-07}
非常感谢alot@Daniele Grattarola,你太棒了!。添加
data\u format='channels\u last'
有效。但是你能用蹩脚的语言解释一下问题是什么吗?我用了更长的解释更新了答案,我很高兴它奏效了。(你能接受这个答案吗?我正在努力提高我的声誉)非常感谢@Daniele Grattarola,你太棒了!。添加
data\u format='channels\u last'
有效。但是你能用蹩脚的语言解释一下问题是什么吗?我用了更长的解释更新了答案,我很高兴它奏效了。(你能接受这个答案吗?我正在努力提高我的声誉)