【发布时间】:2020-10-18 14:34:09
【问题描述】:
我遇到了这个错误,从我从类似问题的答案中看到的所有内容,这是由于没有指定最后一层有 30 个神经元,因为您想要的输出是一个大小为 30 的数组。但这是不是我的情况,我已经指定了这一点,所以如果神经元的数量和输出形状完全匹配,我会发现这个错误很奇怪。下面是可能导致此错误的代码部分(images_gray 是一个 numpy 数组,由形状为 (2000, 128, 128) 的灰度图像组成,result_array 是大小为 30 的 numpy 数组的列表)。
images_gray = np.reshape(images_gray, (len(images_gray), img_rows, img_cols, 1))
to_shuffle = list(zip(images_gray, result_array))
random.shuffle(to_shuffle)
im_input, res_output = zip(*to_shuffle)
im_input, res_output = np.array(im_input[:10]), np.array(res_output[:10])
img_rows, img_cols, _ = np.shape(im_input[0])
input_shape = (img_rows, img_cols, 1)
if K.image_data_format() == 'channels_first':
input_shape = (1, img_rows, img_cols)
model = buildCNN(input_shape)
adadelta = keras.optimizers.Adadelta(lr=0.5)
model.compile(loss="sparse_categorical_crossentropy",optimizer=adadelta,metrics=['accuracy'])
model.fit(im_input, res_output, batch_size=128, epochs=10, verbose=1)
这是buildCNN() 函数:
def buildCNN(input_shape):
model = Sequential()
model.add(Conv2D(32, kernel_size=(3,3),activation='relu',input_shape=input_shape))
model.add(Conv2D(64, (3,3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(30, activation='sigmoid'))
return model
当我使用model.sumary() 时我得到了什么:
【问题讨论】:
标签: python machine-learning keras neural-network conv-neural-network