Tensorflow 使用Talos将单个超参数集与多个超参数集配合使用

Tensorflow 使用Talos将单个超参数集与多个超参数集配合使用,tensorflow,keras,deep-learning,siamese-network,talos,Tensorflow,Keras,Deep Learning,Siamese Network,Talos,我正在尝试做一个小作业项目,我正在尝试使用暹罗网络做说话人识别。我正在尝试使用talos来寻找最好的超参数。当尝试一组超参数时,代码通过了OK,但当我给出一组超参数时,我得到了MemoryError 背景(不确定是否需要,但为了方便起见,请允许我解释) 将音频分割为5秒,每个块 计算每个音频样本的MFCC和MFCC_del以及MFCC_del_del,并将其全部合并,以便将每个音频样本转换为(24x939)数据点/矩阵 通过两组矩阵创建暹罗网络,其中一组是所有“相似”成对扬声器音频样本,另一组

我正在尝试做一个小作业项目,我正在尝试使用暹罗网络做说话人识别。我正在尝试使用talos来寻找最好的超参数。当尝试一组超参数时,代码通过了OK,但当我给出一组超参数时,我得到了MemoryError

背景(不确定是否需要,但为了方便起见,请允许我解释)

  • 将音频分割为5秒,每个块
  • 计算每个音频样本的MFCC和MFCC_del以及MFCC_del_del,并将其全部合并,以便将每个音频样本转换为(24x939)数据点/矩阵
  • 通过两组矩阵创建暹罗网络,其中一组是所有“相似”成对扬声器音频样本,另一组是“不相似扬声器”音频样本
  • 总共6000个测试点和14886个训练点(现在不使用验证将在以后使用)
输出:

Model: "model_6"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_11 (InputLayer)           (None, 24, 939)      0                                            
__________________________________________________________________________________________________
input_12 (InputLayer)           (None, 24, 939)      0                                            
__________________________________________________________________________________________________
sequential_6 (Sequential)       (None, 10)           45580       input_11[0][0]                   
                                                                 input_12[0][0]                   
__________________________________________________________________________________________________
lambda_6 (Lambda)               (None, 1)            0           sequential_6[1][0]               
                                                                 sequential_6[2][0]               
==================================================================================================
Total params: 45,580
Trainable params: 45,544
Non-trainable params: 36
__________________________________________________________________________________________________
Epoch 1/5
2481/2481 [==============================] - 29s 12ms/step - loss: 0.0056 - accuracy: 0.9986 - val_loss: 0.8333 - val_accuracy: 0.1667
Epoch 2/5
2481/2481 [==============================] - 28s 11ms/step - loss: nan - accuracy: 0.9993 - val_loss: nan - val_accuracy: 0.8333
Epoch 3/5
2481/2481 [==============================] - 28s 11ms/step - loss: nan - accuracy: 1.0000 - val_loss: nan - val_accuracy: 0.8333
Epoch 4/5
2481/2481 [==============================] - 28s 11ms/step - loss: nan - accuracy: 1.0000 - val_loss: nan - val_accuracy: 0.8333
Epoch 00004: early stopping
(<keras.callbacks.callbacks.History at 0x2969fa3fd88>,
 <keras.engine.training.Model at 0x2969f2a17c8>)
我得到的错误是:

---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-9-df856388a4bb> in <module>
      1 #t=ta.Scan(x=xtrain_np_img1_img2,y=y_train_numpy,x_val=xtest_np_img1_img2,y_val=y_test_numpy,model=siamese,params=p,experiment_name='exp_1')
      2 
----> 3 t=ta.Scan(x=[xtrain_np_img1,xtrain_np_img2],y=y_train_numpy,x_val=[xtest_np_img1,xtest_np_img2],y_val=y_test_numpy,model=siamese,params=p,experiment_name='exp_1')

~\anaconda3\envs\MyEnv\lib\site-packages\talos\scan\Scan.py in __init__(self, x, y, params, model, experiment_name, x_val, y_val, val_split, random_method, seed, performance_target, fraction_limit, round_limit, time_limit, boolean_limit, reduction_method, reduction_interval, reduction_window, reduction_threshold, reduction_metric, minimize_loss, disable_progress_bar, print_params, clear_session, save_weights)
    194         # start runtime
    195         from .scan_run import scan_run
--> 196         scan_run(self)

~\anaconda3\envs\MyEnv\lib\site-packages\talos\scan\scan_run.py in scan_run(self)
      7 
      8     from .scan_prepare import scan_prepare
----> 9     self = scan_prepare(self)
     10 
     11     # initiate the progress bar

~\anaconda3\envs\MyEnv\lib\site-packages\talos\scan\scan_prepare.py in scan_prepare(self)
     28                                    round_limit=self.round_limit,
     29                                    time_limit=self.time_limit,
---> 30                                    boolean_limit=self.boolean_limit
     31                                    )
     32 

~\anaconda3\envs\MyEnv\lib\site-packages\talos\parameters\ParamSpace.py in __init__(self, params, param_keys, random_method, fraction_limit, round_limit, time_limit, boolean_limit)
     42 
     43         # create the parameter space
---> 44         self.param_space = self._param_space_creation()
     45 
     46         # handle the boolean limits separately

~\anaconda3\envs\MyEnv\lib\site-packages\talos\parameters\ParamSpace.py in _param_space_creation(self)
    133         if len(self.param_index) > 100000:
    134 
--> 135             final_grid = list(it.product(*self._params_temp))
    136             out = np.array(final_grid, dtype='object')
    137 

MemoryError: 
---------------------------------------------------------------------------
MemoryError回溯(上次最近调用)
在里面
1#t=ta.Scan(x=xtrain\u np\u img1\u img2,y=y train\u numpy,x\u val=xtest\u np\u img1\u img2,y\u val=y\u test\u numpy,model=暹罗,params=p,exp\u name='exp\u 1')
2.
---->3 t=ta.Scan(x=[xtrain\u np\u img1,xtrain\u np\u img2],y=y\u train\u numpy,x\u val=[xtest\u np\u img1,xtest\u np\u img2],y\u val=y\u test\u numpy,model=暹罗,params=p,exp\u name='exp\u 1')
初始化中的~\anaconda3\envs\MyEnv\lib\site packages\talos\scan\scan.py__(self,x,y,params,model,experiment\u name,x\u val,y\u val,val\u split,random\u method,seed,performance\u target,fraction\u limit,round\u limit,time\u limit,boolean\u limit,reduce\u method,reduce\u interval,reduce\u window\u threshold,reduce\u threshold\u,reduce\u metric\u,reduction\u,reduction\u,reduction\u metric\u,最小化\
194#启动运行时
195从。扫描运行导入扫描运行
-->196扫描运行(自我)
~\anaconda3\envs\MyEnv\lib\site packages\talos\scan\scan\u run.py in scan\u run(self)
7.
8从。扫描\准备导入扫描\准备
---->9 self=扫描准备(self)
10
11#启动进度条
~\anaconda3\envs\MyEnv\lib\site packages\talos\scan\scan\u prepare.py in scan\u prepare(self)
28舍入极限=自我舍入极限,
29时间限制=自我时间限制,
--->30布尔值限制=自布尔值限制
31                                    )
32
~\anaconda3\envs\MyEnv\lib\site packages\talos\parameters\ParamSpace.py in\uuuuuu init\uuuu(self、params、param\u键、随机方法、分数限制、舍入限制、时间限制、布尔限制)
42
43#创建参数空间
--->44 self.param_space=self._param_space_creation()
45
46#分别处理布尔限制
~\anaconda3\envs\MyEnv\lib\site packages\talos\parameters\ParamSpace.py in\u param\u space\u creation(self)
133如果len(自身参数指数)>100000:
134
-->135最终网格=列表(it.product(*自身参数温度))
136 out=np.array(最终网格,dtype='object')
137
记忆错误:
我的问题是因为我是python/机器学习等方面的新手

  • 如何正确使用fit_generator(早些时候,我尝试使用just fit功能,我的windows会显示死亡屏幕,因为内存错误,我切换到尝试fit_generator,但仍然是相同的错误)。我认为我没有正确地编写代码
  • 我的笔记本电脑规格太差,无法运行此代码吗? 我的规格 内存:16 GB windows 10 64位 CPU:intel core i5(四核) GPU:它内置了GTX1050,但我没有像以前那样配置它,但运气不好

  • 嗨,Saurabh,这是很多代码,供大家查看和理解。您应该尝试在尽可能少的代码行中重现相同的错误,以便人们可以轻松地关注导致问题的特定部分。请参阅测试用例缩减的说明。与“我的代码不起作用,为什么不起作用?”不同,您应该努力识别导致错误的特定条件,并发布“为什么x条件导致tensorflow、Siamse网络中的y错误”谢谢FinleyGibson谢谢你的回复我会删除部分代码,因为它可能不相关我不确定是否有人会感兴趣以防万一。然而,我想说的是,我已经介绍了两套代码。第一种情况下,我使用单组参数,效果很好;第二种情况下,我使用超参数优化工具talos和多组参数,我得到MemoryError,所以我想知道我的代码或talos更改标题是否有问题;Fit_生成器使用单组超参数,但MemoryError和多组参数与fit_generator相比,使用TalosI的hyperparameter检查了几个类似的问题,很少有人使用DASK数据帧指出问题?但我不明白的是,fit_生成器在处理单组超参数时运行良好,为什么它不能处理多组参数?Talos会保留每次迭代使用的所有内存吗?仔细查看错误后,我意识到如果len(self.param\u index)>100000:134-->135 final\u grid=list(it.product(*self.param\u temp)),Talos会在创建(self)133中显示~\anaconda3\envs\MyEnv\lib\site packages\Talos\parameters\ParamSpace.py136 out=np.array(final_grid,dtype='object')137 MemoryError:所以我检查了我给它的3188646000000个参数集的总数,这些参数集是YYY。所以我只是减少了参数的数量,MemoryError消失了,但是现在一些其他错误,这些参数是模型中的权重,内存不足
    Model: "model_6"
    __________________________________________________________________________________________________
    Layer (type)                    Output Shape         Param #     Connected to                     
    ==================================================================================================
    input_11 (InputLayer)           (None, 24, 939)      0                                            
    __________________________________________________________________________________________________
    input_12 (InputLayer)           (None, 24, 939)      0                                            
    __________________________________________________________________________________________________
    sequential_6 (Sequential)       (None, 10)           45580       input_11[0][0]                   
                                                                     input_12[0][0]                   
    __________________________________________________________________________________________________
    lambda_6 (Lambda)               (None, 1)            0           sequential_6[1][0]               
                                                                     sequential_6[2][0]               
    ==================================================================================================
    Total params: 45,580
    Trainable params: 45,544
    Non-trainable params: 36
    __________________________________________________________________________________________________
    Epoch 1/5
    2481/2481 [==============================] - 29s 12ms/step - loss: 0.0056 - accuracy: 0.9986 - val_loss: 0.8333 - val_accuracy: 0.1667
    Epoch 2/5
    2481/2481 [==============================] - 28s 11ms/step - loss: nan - accuracy: 0.9993 - val_loss: nan - val_accuracy: 0.8333
    Epoch 3/5
    2481/2481 [==============================] - 28s 11ms/step - loss: nan - accuracy: 1.0000 - val_loss: nan - val_accuracy: 0.8333
    Epoch 4/5
    2481/2481 [==============================] - 28s 11ms/step - loss: nan - accuracy: 1.0000 - val_loss: nan - val_accuracy: 0.8333
    Epoch 00004: early stopping
    (<keras.callbacks.callbacks.History at 0x2969fa3fd88>,
     <keras.engine.training.Model at 0x2969f2a17c8>)
    
    p = {
           'filter1':[1,2,4,6,8,12,16,24],
        'kernel_size1':[2,4,6,8,12],
        'filter3' :  [1,2,4,6,8],
        'kernel_size3' :  [1,2,4,6,8,12],
        'decay' :[.1,0.01,.001,.0001,.00001],
        'droprate1' :[.1,.2,.3],
        'filter2':[1,2,4,6,8],
        'kernel_size2':[2,4,6,8,12],
        'droprate4' :  [.1,.2,.3],
        'droprate2' :[.1,.2,.3],
        'unit1': [10,24,36,64,128,256],
        'droprate3': [.1,.2,.3],
        'lr' :[(.1,0.01,.001,.0001,.00001)],
        'batch_size' : [1,2],
        'epochs': [4,8,10]             }
    
    def siamese(generator,validation_data,params):
    
        W_init = tf.keras.initializers.he_normal(seed=100)
        b_init = tf.keras.initializers.he_normal(seed=50)
    
        input_shape = (24,939)
        left_input = Input(input_shape)
        right_input = Input(input_shape)
    
        encoder = Sequential()
        encoder.add(Conv1D(filters=(params['filter1']),kernel_size=(params['kernel_size1']), padding='same', activation='relu',input_shape=input_shape,kernel_initializer=W_init, bias_initializer=b_init))
        encoder.add(BatchNormalization())
        encoder.add(Dropout((params["droprate1"])))
        encoder.add(MaxPool1D())
        encoder.add(Conv1D(filters=(params["filter2"]),kernel_size=(params['kernel_size2']), padding='same', activation='relu'))
        encoder.add(BatchNormalization())
        encoder.add(Dropout((params["droprate2"])))
        encoder.add(MaxPool1D())
        encoder.add(Conv1D(filters=(params["filter3"]),kernel_size=(params['kernel_size3']), padding='same', activation='relu'))
        encoder.add(BatchNormalization())
        encoder.add(Dropout((params['droprate3'])))
        encoder.add(MaxPool1D())
        encoder.add(Flatten())
        encoder.add(Dense((params['unit1']),activation='relu'))
        encoder.add(Dropout((params['droprate4'])))
    
        encoded_l = encoder(left_input)
        encoded_r = encoder(right_input)
        distance = Lambda(euclidean_distance, output_shape=eucl_dist_output_shape)([encoded_l, encoded_r])
        adam = optimizers.Adam(lr=params['lr'], beta_1=0.1, beta_2=0.999,decay=params['decay'], amsgrad=False)
        earlyStopping = EarlyStopping(monitor='loss',min_delta=0,patience=3,verbose=1,restore_best_weights=False)
        callback_early_stop_reduceLROnPlateau=[earlyStopping]
        model = Model([left_input, right_input], distance)
        model.compile(loss=contrastive_loss, optimizer=adam,metrics=[accuracy])
        model.summary()
        #history = model.fit([(x_train[:,:,:,0]).astype(np.float32),(x_train[:,:,:,1]).astype(np.float32)],y_train, validation_data=([(x_val[:,:,:,0]).astype(np.float32),(x_val[:,:,:,1]).astype(np.float32)], y_val) ,batch_size=params['batch_size'],epochs=params['epochs'],callbacks=callback_early_stop_reduceLROnPlateau)
        history=model.fit_generator(generator=train_generator,validation_data=val_generator,steps_per_epoch=2481,epochs=5,validation_steps=1000,verbose=1,callbacks=callback_early_stop_reduceLROnPlateau,use_multiprocessing=False,workers=0)
        return history,model
    
    t=ta.Scan(x=[xtrain_np_img1,xtrain_np_img2],y=y_train_numpy,x_val=[xtest_np_img1,xtest_np_img2],y_val=y_test_numpy,model=siamese,params=p,experiment_name='exp_1')
    
    ---------------------------------------------------------------------------
    MemoryError                               Traceback (most recent call last)
    <ipython-input-9-df856388a4bb> in <module>
          1 #t=ta.Scan(x=xtrain_np_img1_img2,y=y_train_numpy,x_val=xtest_np_img1_img2,y_val=y_test_numpy,model=siamese,params=p,experiment_name='exp_1')
          2 
    ----> 3 t=ta.Scan(x=[xtrain_np_img1,xtrain_np_img2],y=y_train_numpy,x_val=[xtest_np_img1,xtest_np_img2],y_val=y_test_numpy,model=siamese,params=p,experiment_name='exp_1')
    
    ~\anaconda3\envs\MyEnv\lib\site-packages\talos\scan\Scan.py in __init__(self, x, y, params, model, experiment_name, x_val, y_val, val_split, random_method, seed, performance_target, fraction_limit, round_limit, time_limit, boolean_limit, reduction_method, reduction_interval, reduction_window, reduction_threshold, reduction_metric, minimize_loss, disable_progress_bar, print_params, clear_session, save_weights)
        194         # start runtime
        195         from .scan_run import scan_run
    --> 196         scan_run(self)
    
    ~\anaconda3\envs\MyEnv\lib\site-packages\talos\scan\scan_run.py in scan_run(self)
          7 
          8     from .scan_prepare import scan_prepare
    ----> 9     self = scan_prepare(self)
         10 
         11     # initiate the progress bar
    
    ~\anaconda3\envs\MyEnv\lib\site-packages\talos\scan\scan_prepare.py in scan_prepare(self)
         28                                    round_limit=self.round_limit,
         29                                    time_limit=self.time_limit,
    ---> 30                                    boolean_limit=self.boolean_limit
         31                                    )
         32 
    
    ~\anaconda3\envs\MyEnv\lib\site-packages\talos\parameters\ParamSpace.py in __init__(self, params, param_keys, random_method, fraction_limit, round_limit, time_limit, boolean_limit)
         42 
         43         # create the parameter space
    ---> 44         self.param_space = self._param_space_creation()
         45 
         46         # handle the boolean limits separately
    
    ~\anaconda3\envs\MyEnv\lib\site-packages\talos\parameters\ParamSpace.py in _param_space_creation(self)
        133         if len(self.param_index) > 100000:
        134 
    --> 135             final_grid = list(it.product(*self._params_temp))
        136             out = np.array(final_grid, dtype='object')
        137 
    
    MemoryError: