为什么循环生成的Keras顺序模型完全相同?

时间:2018-12-18 15:42:52

标签: python keras neural-network conv-neural-network

我想训练所有具有相同超参数的模型,直到获得足够准确的模型。我预计由于创建模型时会随机设置初始权重,因此性能会略有差异。

每次我查看程序时,第一个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

0 个答案:

没有答案