【发布时间】:2020-01-08 17:02:00
【问题描述】:
我正在研究 keras 中的计算机视觉问题,但遇到了一个有趣的问题。我的 val_acc 是 0.0000e+00。这特别有趣,因为我的其他指标(例如 loss、acc 和 val_loss)都正常运行。
当我从 Sequence data_generator 切换到自定义的我很确定它按预期工作时,这种情况开始发生。
我的问题与validation accuracy is 0 with Keras fit_generator 非常相似,但没有得到答案在那个线程中。
我已经检查以确保我的激活和损失指标适合我的特定问题。我正在使用:loss='categorical_crossentropy' metrics=['accuracy'] 并试图预测某个频谱图来自的月份。
验证数据的加载方式与训练数据完全相同,所以我真的无法弄清楚发生了什么甚至随机猜测也应该给出 1/12 val_acc 对吗?不能为零。
这是我的模型架构:
x = (Convolution2D(32,5,5,activation='relu',input_shape=(501,501,1)))(input_img)
x = (MaxPooling2D(pool_size=(2,2)))(x)
x = (Convolution2D(32,5,5,activation='relu'))(x)
x = (MaxPooling2D(pool_size=(2,2)))(x)
x = (Dropout(0.25))(x)
x = (Flatten())(x)
x = (Dense(128,activation='relu'))(x)
x = (Dropout(0.5))(x)
classify = (Dense(12,activation='softmax', kernel_regularizer=regularizers.l1_l2(l1 = 0.001,l2 = 0.001)))(x)
model = Model(input_img,classify)
model.compile(loss='categorical_crossentropy',optimizer='nadam',metrics=['accuracy'])
这是我对 fit_generator 的调用:
model.fit_generator(generator = pd.data_generator(folder,'train'),
validation_data = pd.data_generator(folder,'test'),
steps_per_epoch=(120),
validation_steps=(24),
nb_epoch=20,
verbose=1,
shuffle=True,
callbacks=[tensorboard_callback,early_stop_callback])
最后是我的数据生成器的重要部分:
if mode == 'test':
print('test')
while True:
for things in up.unpickle_batch(folder,50,6000,7200): #The last 1200 things in batches of 50
random.shuffle(things)
test_spect = []
test_months = []
for thing in things:
test_spect.append(thing.spect) #GET BATCH DATA
test_months.append(thing.month-1) #this is is here because the months go from 1-12 but should go from 0-11 for to_categorical
x_test = np.asarray(test_spect) #PREPARE BATCH DATA
x_test = x_test.astype('float32')
x_test /= np.amax(x_test) #- 0.5
X_test = np.reshape(x_test, (-1,501, 501,1))
Y_test = np_utils.to_categorical(test_months,12)
yield X_test,Y_test #RETURN BATCH DATA
【问题讨论】:
-
尝试手动评估它。取一批大小为 10 或类似的东西,在其上运行 model.predict,并打印出预测和基本事实。希望这可以为您提供有关正在发生的事情的更多信息。
-
这有帮助!我发现我没有正确输入随机数据,因为所有测试用例都是同一个月,而且出于某种原因,我的模型猜测每个输入都在同一月份,导致每次都出错!因此,0 val_acc。
标签: python machine-learning keras