有时候我很难适应我的数据,而当我重新启动fit(使用shuffle = true)时,有时候我会很适合。
看到我之前的问题:
作为解决方法,如果在x个时期后损失很大,我想自动重新开始拟合过程。我该如何实现?
我假设我需要使用EarlyStopping回调的自定义版本?由于发现损失较小( 0.5从而需要重新开始训练,我该如何区分ES?
这是一个简化的结构:
def train_till_good():
while not_finished:
train()
def train():
load_data()
model = VerySimpleNet2();
checkpoint = keras.callbacks.ModelCheckpoint(filepath=images_root + dataset_name + '\\CheckPoint.hdf5')
myopt = keras.optimizers.Adam(lr=0.001,decay=0.01)
model.compile(optimizer=myopt,loss='categorical_crossentropy',metrics=['accuracy'])
LRS = cyclicLR(base_lr=0.000005,max_lr=0.0003,step_size=200.)
tensorboard = keras.callbacks.TensorBoard(log_dir='C:\\Tensorflow',histogram_freq=0,write_graph=True,write_images=False)
ES = keras.callbacks.EarlyStopping(monitor='val_loss',mode='min',verbose=1,patience=5)
model.fit(train_images,train_labels,shuffle=True,epochs=num_epochs,callbacks=[checkpoint,tensorboard,ES,LRS],validation_data = (test_images,test_labels)
)
def VerySimpleNet2():
model = keras.Sequential([
keras.layers.Dense(112,activation=tf.nn.relu,input_shape=(224,224,3)),keras.layers.Dropout(0.4),keras.layers.flatten(),keras.layers.Dense(3,activation=tf.nn.softmax)
])
return model