Python ImageDataGenerator的标签形状错误

Python ImageDataGenerator的标签形状错误,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,我试图用不同尺寸的图像训练一个模型,通常我会使用flatte,但是flatte()要求所有图像都有一个固定的尺寸,而我没有 在这里,我试图用globalMapool2D()替换flatte,但最后我遇到了预期尺寸的问题。我是TensorFlow的新手,我很难理解在哪里可以调整我的模型以避免出现预期形状的问题 代码:(一些导入是不必要的,但它将被进一步使用,我添加了它们以防假定的不兼容) 模型总结如下: Model: "sequential_11" ______________

我试图用不同尺寸的图像训练一个模型,通常我会使用flatte,但是flatte()要求所有图像都有一个固定的尺寸,而我没有

在这里,我试图用globalMapool2D()替换flatte,但最后我遇到了预期尺寸的问题。我是TensorFlow的新手,我很难理解在哪里可以调整我的模型以避免出现预期形状的问题

代码:(一些导入是不必要的,但它将被进一步使用,我添加了它们以防假定的不兼容)

模型总结如下:

Model: "sequential_11"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_20 (Conv2D)           (None, None, None, 32)    896       
_________________________________________________________________
activation_38 (Activation)   (None, None, None, 32)    0         
_________________________________________________________________
conv2d_21 (Conv2D)           (None, None, None, 32)    9248      
_________________________________________________________________
activation_39 (Activation)   (None, None, None, 32)    0         
_________________________________________________________________
dropout_20 (Dropout)         (None, None, None, 32)    0         
_________________________________________________________________
global_max_pooling2d_9 (Glob (None, 32)                0         
_________________________________________________________________
dense_19 (Dense)             (None, 512)               16896     
_________________________________________________________________
activation_40 (Activation)   (None, 512)               0         
_________________________________________________________________
dropout_21 (Dropout)         (None, 512)               0         
_________________________________________________________________
dense_20 (Dense)             (None, 2)                 1026      
_________________________________________________________________
activation_41 (Activation)   (None, 2)                 0         
=================================================================
Total params: 28,066
Trainable params: 28,066
Non-trainable params: 0
_________________________________________________________________
Epoch 1/10
ValueError: Error when checking target: expected activation_41 to have shape (2,) but got array with shape (1,)
错误如下:

Model: "sequential_11"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_20 (Conv2D)           (None, None, None, 32)    896       
_________________________________________________________________
activation_38 (Activation)   (None, None, None, 32)    0         
_________________________________________________________________
conv2d_21 (Conv2D)           (None, None, None, 32)    9248      
_________________________________________________________________
activation_39 (Activation)   (None, None, None, 32)    0         
_________________________________________________________________
dropout_20 (Dropout)         (None, None, None, 32)    0         
_________________________________________________________________
global_max_pooling2d_9 (Glob (None, 32)                0         
_________________________________________________________________
dense_19 (Dense)             (None, 512)               16896     
_________________________________________________________________
activation_40 (Activation)   (None, 512)               0         
_________________________________________________________________
dropout_21 (Dropout)         (None, 512)               0         
_________________________________________________________________
dense_20 (Dense)             (None, 2)                 1026      
_________________________________________________________________
activation_41 (Activation)   (None, 2)                 0         
=================================================================
Total params: 28,066
Trainable params: 28,066
Non-trainable params: 0
_________________________________________________________________
Epoch 1/10
ValueError: Error when checking target: expected activation_41 to have shape (2,) but got array with shape (1,)
看起来这个值肯定是“减半”了,但我试着去掉了一些图层,我无法让它工作

此外,如果你能推荐一个教程来更好地理解这些概念,我洗耳恭听


非常感谢你+

我认为你不应该把
n_classes=1
(正如你的评论所说),因为它不是
真的
,可能会带来混乱。您可以使用在所有情况下都有效的方法

使用
class\u mode='classifical'
在任何情况下都有效,无论类的数量是多少

然后,在最后一层中,您甚至不必手动设置类别的数量,您可以执行以下操作:

Dense(units=len(train_data_gen.class_indices))

然后,最终的神经元和类别的数量总是匹配的。然后,一定要确保你有一个loss函数,它允许一个热编码的输出,并且你可以正常运行(例如,
categorical\u crossentropy

我认为你不应该把
n\u classes=1
(正如你的评论所说),因为它不是
真的
,可能会带来混乱。您可以使用在所有情况下都有效的方法

使用
class\u mode='classifical'
在任何情况下都有效,无论类的数量是多少

然后,在最后一层中,您甚至不必手动设置类别的数量,您可以执行以下操作:

Dense(units=len(train_data_gen.class_indices))

然后,最终的神经元和类别的数量总是匹配的。然后,始终确保您有一个loss函数,该函数允许一个热编码输出,并且您可以正常运行(例如,
categorical\u crossentropy

保存类标签的数组的形状是什么?输出的形状和类标签数组之间可能不匹配。这可能是因为您进行了二元分类,所以类标签数组的形状为(nx1),而您的网络需要(nx2)Hi Koralp数组,谢谢您的回答。实际上,我本身没有“标签”,因为来自目录的ImageDataGenerator.flow通过在不同的文件夹中查找图像来完成工作(据我所知)。在这里,我有两个图像像一个图像一样分散在两个不同的文件夹中(ISUP1和ISUP2是名称)。在ImageGenerator的末尾,我发现了以下内容:找到了属于2个类的2个图像。是的,ImageDataGenerator确实以迭代方式将数据提供给模型。但是,如果您选中此处,您可以看到使用class_模式作为
binary
将产生1D二进制标签,这可能会导致维度不匹配!令人惊叹的!它起作用了!如果我想在ImageDataGenerator中使用二进制分类,那么我应该使用一些类=1。非常感谢++保存类标签的数组的形状是什么?输出的形状和类标签数组之间可能不匹配。这可能是因为您进行了二元分类,所以类标签数组的形状为(nx1),而您的网络需要(nx2)Hi Koralp数组,谢谢您的回答。实际上,我本身没有“标签”,因为来自目录的ImageDataGenerator.flow通过在不同的文件夹中查找图像来完成工作(据我所知)。在这里,我有两个图像像一个图像一样分散在两个不同的文件夹中(ISUP1和ISUP2是名称)。在ImageGenerator的末尾,我发现了以下内容:找到了属于2个类的2个图像。是的,ImageDataGenerator确实以迭代方式将数据提供给模型。但是,如果您选中此处,您可以看到使用class_模式作为
binary
将产生1D二进制标签,这可能会导致维度不匹配!令人惊叹的!它起作用了!如果我想在ImageDataGenerator中使用二进制分类,那么我应该使用一些类=1。非常感谢,非常感谢,它更可靠。非常感谢,它确实更可靠