我想训练所有具有相同超参数的模型,直到获得足够准确的模型。我预计由于创建模型时会随机设置初始权重,因此性能会略有差异。
每次我查看程序时,第一个CNN的准确性都与我期望的不同。但是,后续的CNN均与第一个CNN完全相同。我正在清除keras会话,并在每次迭代中“删除”模型。我没有将任何随机种子设置为固定值。
这是我生成网络的代码部分(在Python 3.6中)
def reset_weights(model):
session = keras.backend.get_session()
for layer in model.layers:
for v in layer.__dict__:
v_arg = getattr(layer,v)
if hasattr(v_arg,'initializer_run'):
initializer_method = getattr(v_arg, 'initializer')
initializer_method.run(session=session)
print('reinitializing layer {}.{}'.format(layer.name, v))
def train_models(input_dir, output_dir, roi_file):
error = 1.0
roi_info = read_ROI_file(roi_file)
x_data, y_data = generate_data_set(input_dir, roi_info)
while (error > 0.001):
keras.backend.clear_session()
the_net = define_model()
reset_weights(the_net)
the_history = train_model(the_net, x_data, y_data, num_epochs=100)
error = the_history.history['val_loss'][-1]
print("Model accuracy : {:7.5f}".format(error))
if error < 0.002:
the_time = datetime.now()
net_name = os.path.join(output_dir, "bayer_net_{:s}_acc={:7.5f}".format(
the_time.strftime("%Y-%m-%d_%H-%M-%S"), error))
print("Saved as: {:s}\n\n".format(net_name))
the_net.save("{:s}.h5".format(net_name))
plot_history(the_history, "{:s}.png".format(net_name))
else:
print ("Not saving the model.\n\n")
the_net = None