Wae*_*Eid 2 python machine-learning deep-learning keras
此代码结合了图像和遮罩以进行图像检测?
我该如何纠正该错误?
batch_size = x.shape [0] AttributeError:“元组”对象没有属性“ 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)
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的模型:
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'])
Run Code Online (Sandbox Code Playgroud)
所选答案不准确。代码失败的原因不是因为元组属于((input1,output1), (input2,output2)), ...)
,而是因为它们属于(((input1, class1), (input2, class2), ...), ((output1, class1), (output2, class2), ...))
.
您可以通过简单地添加class_mode=None
到您的flow_from_directory
呼叫来解决您的问题。
因此,由于您的模型只有一个输出,因此无法像这样加入两个生成器。
(input,output)
元组的东西。((input1,output1), (input2,output2))
在一个元组中输出,元组。当您的模型从生成器中获取一批时,它会尝试使其形状为input
,而是找到了(input,output)
。
工作发电机:
您可能可以像这样创建自己的生成器:
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])
Run Code Online (Sandbox Code Playgroud)
实例化它:
train_generator2 = myGenerator(train_generator,train_generator1)
Run Code Online (Sandbox Code Playgroud)
现在,您将在输出形状上遇到真正的麻烦。如果要处理图像之间的图像,建议您使用纯卷积模型。
卷积层输出(Batch, Side1, Side2, channels)
,这是您在图像中使用的形状。
但是输出密集的层(Batch, size)
。这只有在以后调整形状Reshape((200,150,3))
以匹配“真实图像” 时才有效。
提示:模型中间的Dense 20可能太小,无法代表整个图像。(当然,这取决于您的任务)。
此任务可能的模型是:
Conv
... Maybe more convs
MaxPooling
Conv
... Maybe more convs
MaxPooling
Conv
......
UpSampling
Conv
...
UpSampling
Conv
....
Run Code Online (Sandbox Code Playgroud)
每次卷积都会padding='same'
使您的生活更轻松。(但由于一维为150,因此必须在某个点上对值进行填充,因为当达到75时,MaxPooling将删除/添加一个像素(75不能除以2)。
归档时间: |
|
查看次数: |
10934 次 |
最近记录: |