首页 > 解决方案 > ValueError:无法将输入数组从形状(512,512)广播到形状(512,512,1)

问题描述

我尝试使用 pre_process 函数和 color_mode 修改代码,但每次都会弹出不同的错误。

def pre_process(img):
    ret, mask = cv2. threshold(img, 100, 255, cv2.THRESH_BINARY_INV)
    mask_inv = cv2.bitwise_not(mask)
    return mask_inv

train = ImageDataGenerator(rescale=1/255, vertical_flip=True,preprocessing_function=pre_process)
test = ImageDataGenerator(rescale=1/255, vertical_flip=True,preprocessing_function=pre_process)

train_dataset = train.flow_from_directory(path,
                                          target_size=(512,512),
                                          batch_size = 32,
                                          class_mode = 'binary',
                                          color_mode = 'grayscale',
                                          shuffle = True
                                          )
                                         
test_dataset = test.flow_from_directory(path,
                                          target_size=(512,512),
                                          batch_size =32,
                                          class_mode = 'binary',
                                          color_mode = 'grayscale',
                                          shuffle = True
                                          )

ValueError:无法将输入数组从形状(512,512)广播到形状(512,512,1).....这是我从上面的代码中得到的。

但是,如果我使用下面的 pre_process 方法,没有错误,但我的损失总是在训练时 NAN。

def pre_process(img):
    ret, mask = cv2. threshold(img, 100, 255, cv2.THRESH_BINARY_INV)
    mask_inv = cv2.bitwise_not(mask)
    img_expanded = tf.expand_dims(mask_inv, 2)
    return img_expanded

标签: tensorflowopencv

解决方案


推荐阅读