Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.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 批次大小=x.shape[0]属性错误:';元组';对象没有属性';形状';_Python_Machine Learning_Deep Learning_Keras - Fatal编程技术网

Python 批次大小=x.shape[0]属性错误:';元组';对象没有属性';形状';

Python 批次大小=x.shape[0]属性错误:';元组';对象没有属性';形状';,python,machine-learning,deep-learning,keras,Python,Machine Learning,Deep Learning,Keras,此代码结合图像和遮罩进行图像检测? 我怎样才能纠正这个错误 batch_size=x.shape[0]AttributeError:“tuple”对象没有属性“shape” 这是用于培训的代码: train_datagen = ImageDataGenerator( rescale=1. / 255, shear_range=0.2, zoom_range=0.2, horizontal_flip=T

此代码结合图像和遮罩进行图像检测?
我怎样才能纠正这个错误

batch_size=x.shape[0]AttributeError:“tuple”对象没有属性“shape”

这是用于培训的代码:

train_datagen = ImageDataGenerator(
            rescale=1. / 255,
            shear_range=0.2,
            zoom_range=0.2,
            horizontal_flip=True)
train_datagen_1 = ImageDataGenerator(
            rescale=1. / 255,
            shear_range=0.2,
            zoom_range=0.2,
            horizontal_flip=True)


train_generator = train_datagen.flow_from_directory(
            train_data_dir,
            target_size=(200, 150),
            batch_size=1
          )
train_generator_1= train_datagen_1.flow_from_directory(
            train_data_dir_1,
            target_size=(200, 150),
            batch_size=1)
train_generator_2 = zip( train_generator, train_generator_1)

model.fit_generator(
            train_generator_2,
            steps_per_epoch=nb_train_samples // batch_size,
            epochs=50)
这是我正在使用的模型:

model = Sequential() 
model.add(Conv2D(32, (3, 3), input_shape=(200, 150, 3))) 
model.add(Activation('relu')) 
model.add(MaxPooling2D(pool_size=(2, 2))) 
model.add(Flatten()) 
model.add(Dense(20)) model.add(Activation('relu')) 
model.add(Dropout(0.5)) 
model.add(Dense(90000)) 
model.add(Activation('sigmoid')) 
model.compile(loss='mse', optimizer='rmsprop', metrics=['accuracy'])

因此,由于您的模型只有一个输出,因此不能像这样连接两个生成器

  • 生成器必须输出元组中的
    (输入,输出)
  • 您正在输出
    ((input1,output1),(input2,output2))
    ,元组中的元组
当您的模型从生成器中获取批次时,它试图获取它认为是
输入的形状,但它会找到
(输入,输出)

使用发电机:

您可以像这样创建自己的生成器:

def myGenerator(train_generator,train_generator1):

    while True:

        xy = train_generator.next() #or next(train_generator)
        xy1 = train_generator1.next() #or next(train_generator1)
        yield (xy[0],xy1[0])
用以下命令实例化它:

train_generator2 = myGenerator(train_generator,train_generator1)

现在,您将在输出形状方面遇到真正的问题。如果你从一幅图像到另一幅图像,我建议你使用纯卷积模型

卷积层输出
(批处理、边1、边2、通道)
,这是您在图像中处理的形状

但密集层输出
(批次、大小)
。只有稍后使用
重塑((200150,3))
对其进行重塑,以匹配您的“真实图像”,此功能才能发挥作用

提示:模型中间的一个稠密的20可能太小而不能代表整个图像。(当然这取决于你的任务)

此任务的一个可能模型是:

Conv
... Maybe more convs
MaxPooling
Conv
... Maybe more convs
MaxPooling
Conv

......

UpSampling
Conv
...
UpSampling
Conv
....

使用
padding='same'
进行每一次卷积,让您的生活更轻松。(但由于一维是150,因此您必须在某一点管理填充值,因为当您达到75时,MaxPooling将删除/添加一个像素(75不能被二除)。

所选答案不准确。代码失败的原因不是因为元组是
((input1,output1),(input2,output2)),…)
,但因为它们属于
((input1,class1),(input2,class2),…),((output1,class1),(output2,class2),…)


您只需将
class\u mode=None
添加到
flow\u from\u directory
调用中,就可以解决问题。

flow\u from\u directory()添加
class\u mode=None
可以解决问题:

 from keras.preprocessing.image import ImageDataGenerator

 train_datagen = ImageDataGenerator(
      rescale=1./255,
      shear_range=0.2,
      zoom_range=0.2,
      horizontal_flip=True)

 train_image_generator = train_datagen.flow_from_directory('path/to/data',
      target_size=(256, 256), 
      class_mode=None, 
      batch_size=4) 

文件“C:\Users\Wael\Anaconda2\envs\tf\lib\site packages\keras\engine\training.py”,第1833行,在fit\u generator batch\u size=x.shape[0]中AttributeError:“tuple”对象没有属性“shape”x是在fit_生成器函数中定义的。模型接受大小为200 x 150的图像,它必须生成大小为200 x 150的输出图像。图像保存在硬盘上。顺序模型不处理两个输入。您真的想要两个输入吗?您上面的描述似乎是“一个图像”(一个输入)-->一个图像(一个输出)“一个图像作为输入,一个作为输出,但输出是1 X(200*150*3)的向量。当我通过train_generator只是为了适应模型运行时。我在这个链接中编写了相同的代码,非常感谢您的完美回答。但是第一层有以下错误值错误:检查输入时出错:预期conv2d_71_输入有4维,但得到了形状为(200、150、3)的数组模型总是需要很多样本。事实上,它需要
(None,200,150,3)
,其中
None
是批大小。您不能只向模型传递一个图像,而是一批图像。如果您只有一个图像,请像
(1200150,3)那样重塑它们
如果
category
与多类分类相关,为什么将其设置为这样会导致此错误?为什么
不需要
?我知道这些评论是为了“更有用”的帖子,但该死!你真是个英雄!我几乎构建了一个自定义生成器。