使用keras EarlyStopping时,如何防止TypeError:-:'NoneType'和'int'不受支持的操作数类型?

Nic*_*row 6 python keras

这是我的代码:

from keras.callbacks import EarlyStopping

model = Sequential()
model.add(Dense(50, input_dim=33, init='uniform', activation='relu'))
for u in range(3): #how to efficiently add more layers
    model.add(Dense(33, init='uniform', activation='relu'))
model.add(Dense(122, init='uniform', activation='sigmoid'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_train, Y_train, nb_epoch=20, batch_size=20, callbacks=[EarlyStopping(monitor='val_loss', patience=4)])
Run Code Online (Sandbox Code Playgroud)

并且出现以下错误:

TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
Run Code Online (Sandbox Code Playgroud)

不使用时不会产生该错误EarlyStopping

有人解决吗?

Nas*_*Ben 5

如果您考虑一下:您要求在培训期间不使用验证来监控验证损失。

model.fit(X_train, Y_train, nb_epoch=20, batch_size=20, validation_split=0.2, callbacks=[EarlyStopping(monitor='val_loss', patience=4)])
Run Code Online (Sandbox Code Playgroud)

例如,如果您想进行验证。它将使用 20% 的数据作为验证集。您不会对这些样本进行训练,只是在每个时期结束时验证您的模型。

正如您在有关此代码的其他问题中所提到的:将最后一次激活更改为 softmax 以与categorical_crossentropy. 或者binary_crossentropy根据您的需要切换目标。