首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重塑Tensorflow ImageDataGenerator

重塑Tensorflow ImageDataGenerator
EN

Stack Overflow用户
提问于 2021-04-07 03:22:44
回答 1查看 33关注 0票数 1

我正在尝试使用ImageDataGenerator创建我的训练数据集。有两个不同的文件夹,其中包含不同标签的图像。当我开始训练的时候,我得到了一个关于形状的错误:

代码语言:javascript
复制
ValueError: Shapes (None, 1) and (None, 2) are incompatible

我该如何解决这个问题?每个图像的原始大小是100x100,它们是RGB形式的。

代码语言:javascript
复制
 datagen = ImageDataGenerator(
    rescale = 1./255,
    rotation_range = 5,
    zoom_range = (0.95, 0.95),
    horizontal_flip = False,
    vertical_flip = False,
    data_format = 'channels_last',
    validation_split = 0.0,
    dtype = tf.float32
    )

train_generator = datagen.flow_from_directory('sign_data/', 
                                              target_size=(48,48),
                                              batch_size=4, color_mode='grayscale', 
                                              class_mode='sparse', shuffle=True, 
                                              subset='training', seed=123) 

model = Sequential()
model.add(Conv2D(16, 3, data_format="channels_last", padding='same', input_shape=(48,48,1)))
model.add(Conv2D(32, 3, padding='same'))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(2))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

hist = model.fit(train_generator, epochs=10)

我也尝试使用target_size=(48,48,1)

代码语言:javascript
复制
train_generator = datagen.flow_from_directory('sign_data/', 
                                          target_size=(48,48,1),
                                          batch_size=4, color_mode='grayscale', 
                                          class_mode='sparse', shuffle=True, 
                                          subset='training', seed=123)

错误是

代码语言:javascript
复制
ValueError: could not broadcast input array from shape (48,48,1) into shape (48,48,1,1)
EN

回答 1

Stack Overflow用户

发布于 2021-05-15 21:51:10

来自评论

如果使用sparse类模式,则需要使用sparse categorical crossentropy loss (转译自Dr.Snoopy)

工作代码如下所示

代码语言:javascript
复制
datagen = ImageDataGenerator(
    rescale = 1./255,
    rotation_range = 5,
    zoom_range = (0.95, 0.95),
    horizontal_flip = False,
    vertical_flip = False,
    data_format = 'channels_last',
    validation_split = 0.0,
    dtype = tf.float32
    )

train_generator = datagen.flow_from_directory('sign_data/', 
                                              target_size=(48,48),
                                              batch_size=4, color_mode='grayscale', 
                                              class_mode='sparse', shuffle=True, 
                                              subset='training', seed=123) 

model = Sequential()
model.add(Conv2D(16, 3, data_format="channels_last", padding='same', input_shape=(48,48,1)))
model.add(Conv2D(32, 3, padding='same'))
model.add(MaxPooling2D())
model.add(Flatten())
model.add(Dense(2))

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

hist = model.fit(train_generator, epochs=10)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66975217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档