首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras -理解ImageDataGenerator维度

Keras -理解ImageDataGenerator维度
EN

Data Science用户
提问于 2019-07-04 13:32:11
回答 1查看 1.6K关注 0票数 1

我试图通过在Keras中使用经过训练的YOLOv2模型来实现自定义对象检测,删除最后一层并使用新的数据对其进行再培训。不过,我对如何将数据提供给Keras感到困惑。我用YOLO注释用边框注释了一堆图片,并将它们放在两个单独的文件夹中( .jpgs所在的.jpgs文件夹和.txt注释所在的annots )。

我还从模型中删除了最后一层,并添加了一个自定义层(我正在尝试预测两个类的边界框)。

我试图用ImageDataGenerator传递数据,因为我的数据集非常小。

我有以下输入对象:

代码语言:javascript
复制
np.shape(train_images) # this contains RGB data from 79 pictures 
(79, 1, 608, 608, 3)
np.shape(train_y)
(79,)

我试图将这些传递给ImageDataGenerator,但是我得到了一个错误:

代码语言:javascript
复制
train_datagen = ImageDataGenerator(
      rotation_range=20,
      width_shift_range=0.2,
      height_shift_range=0.2,
      horizontal_flip=True,
      fill_mode='nearest')

train_generator = train_datagen.flow(
        train_images,
        train_y)

ValueError: `x` (images tensor) and `y` (labels) should have the same length. Found: x.shape = (1, 608, 608, 3), y.shape = (79,)

我不明白问题出在哪里。不知怎么的,我的图像数据的第一个维度完全消失了,因此不匹配.它有什么问题?

EN

回答 1

Data Science用户

回答已采纳

发布于 2019-07-04 13:58:57

我认为您的train_images数组应该具有形状(79, 698, 608, 3)。生成器遍历这些数组的每个第一个维度,因此传递一批4d numpy数组,而不是一批3d numpy数组。

您可以尝试使用numpy.squeeze()查看这是否有用,如下所示:

代码语言:javascript
复制
In [1]: import numpy as np                                                      

In [2]: a = np.random.randint(0, 10, (2, 1, 10, 10, 3))                         

In [3]: np.squeeze(a, axis=1).shape                                             
Out[3]: (2, 10, 10, 3)

因此,一定要设置axis=1参数。然后,就像您正在做的那样,传递更新的数组。

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/55054

复制
相关文章

相似问题

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