keras中的输出尺寸不匹配

时间:2019-05-08 00:16:27

标签: python machine-learning keras

我正在尝试在尺寸为200 x 200 x 3的每个图像的图像数据集上训练我的cnn模型。 我的x_train的尺寸为(25290, 200, 200, 3),x_test的尺寸为(7026, 200, 200, 3).

我已经尝试使用fit_generator,但错误仍然存​​在

这是我建立的模型

model = Sequential()
model.add(Conv2D(64, kernel_size=3, activation='relu', input_shape=(200,200,3)))
model.add(Conv2D(50, kernel_size=3, activation='relu'))
model.add(MaxPooling2D(pool_size=(1,2)))
model.add(Conv2D(25, kernel_size=6, activation='relu'))
model.add(MaxPooling2D(pool_size=(1,2)))
model.add(Conv2D(5, kernel_size=16, activation='relu'))
model.add(Flatten())
model.add(Dense(550))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Dense(250))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Dense(100))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))
#model.add(Flatten())
model.add(Dense(25))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Dense(2))
model.add(Activation('softmax'))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit_generator(x_train, y_train,
           steps_per_epoch = int(ceil(float(len(x_train)//50))),
           epochs=1,
           verbose=1,
           validation_data=(x_val, y_val),callbacks=[monitor])

运行模型时出现以下错误

Error when checking target: expected activation_31 to have 2 dimensions, 
but got array with shape (25290, 2, 2)

activation_31是激活model.add(Activation('softmax'))的最后一层

1 个答案:

答案 0 :(得分:0)

如评论中所述,这是因为网络输出的数字与y_train的形状不匹配。您需要对训练标签集进行一次热编码。由于您已经在使用keras:

if ($("#pilihan option:selected").val() == 'A') {
    $('#satu').prop('hidden', 'true');
    $('#dua').prop('hidden', 'true');
} else {
    $('#satu').prop('hidden', false);

    $('#dua').prop('hidden', false);
}
});

然后您可以运行function validateForm() { var x = document.forms["myForm"]["opsiselect"].value; var y = document.forms["myForm"]["A"].value; if (x != "A" && y == "") { alert("Data Belum di isi"); return false; } else { alert("berhasil"); return true; } 方法。