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

Python 为什么我的循环生成的Keras序列模型完全相同?,python,keras,neural-network,conv-neural-network,Python,Keras,Neural Network,Conv Neural Network,我想用相同的超参数训练多个模型,直到得到一个足够精确的模型。我预计由于在创建模型时随机设置初始权重,性能会有轻微偏差 正如我所预料的那样,每次我收听我的节目,第一个CNN都有不同的准确度。然而,后续CNN的性能与第一个CNN完全相同。我正在清除keras会话,并在每次迭代中“删除”模型。我没有将任何随机种子设置为固定值 下面是我生成网络的代码部分(在Python 3.6中) def重置重量(型号): session=keras.backend.get_session() 对于model.laye

我想用相同的超参数训练多个模型,直到得到一个足够精确的模型。我预计由于在创建模型时随机设置初始权重,性能会有轻微偏差

正如我所预料的那样,每次我收听我的节目,第一个CNN都有不同的准确度。然而,后续CNN的性能与第一个CNN完全相同。我正在清除keras会话,并在每次迭代中“删除”模型。我没有将任何随机种子设置为固定值

下面是我生成网络的代码部分(在Python 3.6中)

def重置重量(型号):
session=keras.backend.get_session()
对于model.layers中的图层:
对于层中的v,请说明:
v_arg=getattr(层,v)
如果hasattr(v_arg,'initializer_run'):
初始值设定项\方法=getattr(v_arg,'初始值设定项')
初始化器\u method.run(session=session)
打印('重新初始化层{}.{}'。格式(layer.name,v))
def系列模型(输入目录、输出目录、roi文件):
误差=1.0
roi\u info=读取roi\u文件(roi\u文件)
x_数据,y_数据=生成_数据集(输入_目录,roi信息)
而(误差>0.001):
keras.backend.clear_session()
_net=define_model()
重置重量(净重量)
_历史=列车模型(_网络,x_数据,y_数据,num_epochs=100)
错误=历史记录。历史记录['val\u loss'][-1]
打印(“模型精度:{:7.5f}”。格式(错误))
如果误差<0.002:
_time=datetime.now()
net_name=os.path.join(output_dir,“bayer_net_uu{:s}\u acc={:7.5f}”。格式(
_time.strftime(%Y-%m-%d_%H-%m-%S),错误)
打印(“另存为:{:s}\n\n.”格式(网络名称))
_net.save(“{:s}.h5.format(net_name))
plot_history(_history,“{:s}.png.”格式(net_名称))
其他:
打印(“不保存模型。\n\n”)
网络=无
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