gpt4 book ai didi

tensorflow - ValueError : Error when checking target: expected dense_2 to have shape (None, 2) 但得到形状为 (1, 1) 的数组

转载 作者:行者123 更新时间:2023-12-02 17:29:51 25 4
gpt4 key购买 nike

嗨,我是 Keras 的新手,使用后端 tensorflow 。我已经构建了两个可能类别的图像训练和验证集;我的网络必须以两类"is"或“否”结束。我使用 ImageDatagenerator 从文件夹中读取图像并准备训练和验证集。最后我得到了标题中描述的问题。我的猜测是 ImageDatagenerator 没有按照我的意愿准备数据;任何人都可以向我解释如何解决它,这是代码(谢谢):

# Data Preparation
# dimensions of our images.
img_width, img_height = 256, 256

#top_model_weights_path = 'bottleneck_fc_model.h5'
train_data_dir = 'data/train'
validation_data_dir = 'data/validation'
nb_train_samples = 2
nb_validation_samples = 2
epochs = 50
batch_size = 1
num_classes = 2

# prepare data augmentation configuration
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.2,
zoom_range=0.2,
data_format=K.image_data_format(),
horizontal_flip=True)

test_datagen = ImageDataGenerator(
rescale=1. / 255,
data_format=K.image_data_format())

train_generator = train_datagen.flow_from_directory(
train_data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='binary')

validation_generator = test_datagen.flow_from_directory(
validation_data_dir,
target_size=(img_height, img_width),
batch_size=batch_size,
class_mode='binary')

# create the CNN model
model = Sequential()
model.add(Conv2D(24, kernel_size=(20, 20), strides=(2,2), padding='valid', activation='relu', input_shape=(256,256,3)))

model.add(MaxPooling2D(pool_size=(7, 7), strides=(2,2), padding='valid'))

# Avoiding overfitting
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(64, activation='relu'))

# Avoiding overfitting
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

print(model.summary())

# Compile model
sgd = optimizers.SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mean_squared_error', optimizer='sgd', metrics=['accuracy'])

# Fit the model
model.fit_generator(
train_generator,
steps_per_epoch=nb_train_samples // batch_size,
epochs=epochs,
validation_data=validation_generator,
validation_steps=nb_validation_samples // batch_size,
verbose=0)

# Save the weights
model.save_weights('first_try.h5')

最佳答案

特别是对于“两个类”,有两种方法:

  • 一个结果,0 或 1,是或否。
  • 两个结果,一个是 A 类的概率,另一个是 B 类的概率。

每个模型都需要不同的模型输出:

  • 一维输出,带有Dense(1,....)
  • 2D 输出,带有 Dense(2,....)

您似乎属于第一种情况,因此,更改最后一层。

这个错误是什么意思?

您的模型输出形状为 (BatchSize, 2) 的内容,但您的类标签具有形状 (BatchSize,1)。

关于tensorflow - ValueError : Error when checking target: expected dense_2 to have shape (None, 2) 但得到形状为 (1, 1) 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44208646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com