我进行了一些实验,将每个实验的结果保存在词典中,然后将各个词典存储在另一本词典中。但是我无法保存这本词典。这是我的代码:
def f_compile_fit_evaluate_model1(filters1, kernel_size1, filters2 , kernel_size2, epochs):
'''
This function takes parameters and fits a model, evaluates it on the dev set and stores key objects --a) the model itself, b) the history of the training and c) the results of the
evaluation, into a dictionary which it returns.
INPUTS:
- filters1 : Number of filters (channels) that are used to transform the inputs through Conv1D layers (all inputs are processed with Conv1D layers with the same number of
of filters/channels)
- kernel_size1 : The kernel size of the Conv1D layers that process and transform the Inputs
- filters2 : Number of filters of the Conv1D later that is used to transform the concatenated outputs of the first block of Conv1D layers (which processed the raw inputs individually.)
- kernel_size2 : The kernel size of the Conv1D layer described above
In addition inputs of this function are the data which are passed it through the global environment and not explicitly through the function call.
E.g., setting1_train_, setting2_train_ etc.
OUTPUTS:
Experiment_results :A dictionary containing three keys: a) model, b) history and c) evaluation
'''
setting1 = Input(shape = (10,8), name = 'setting1')
setting2 = Input(shape = (10,8), name = 'setting2')
s2 = Input(shape = (10,8), name = 's2')
s3 = Input(shape = (10,8), name = 's3')
s6 = Input(shape = (10,8), name = 's6')
s7 = Input(shape = (10,8), name = 's7')
s8 = Input(shape = (10,8), name = 's8')
s9 = Input(shape = (10,8), name = 's9')
s11 = Input(shape = (10,8), name = 's11')
s12 = Input(shape = (10,8), name = 's12')
s13 = Input(shape = (10,8), name = 's13')
s14 = Input(shape = (10,8), name = 's14')
s15 = Input(shape = (10,8), name = 's15')
s17 = Input(shape = (10,8), name = 's17')
s20 = Input(shape = (10,8), name = 's20')
s21 = Input(shape = (10,8), name = 's21')
setting1_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(setting1)
setting2_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(setting2)
s2_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s2)
s3_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s3)
s6_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s6)
s7_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s7)
s8_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s8)
s9_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s9)
s11_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s11)
s12_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s12)
s13_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s13)
s14_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s14)
s15_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s15)
s17_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s17)
s20_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s20)
s21_ = Conv1D(filters = filters1, kernel_size = kernel_size1, activation = 'relu')(s21)
x = Concatenate()([setting1_, setting2_, s2_, s3_, s6_, s7_, s8_, s9_, s11_, s12_, s13_, s14_, s15_, s17_, s20_, s21_])
x = Conv1D(filters =filters2, kernel_size = kernel_size2, activation = 'relu')(x)
x = GlobalMaxPooling1D()(x)
preds = Dense(1, activation = 'relu')(x)
model = Model(inputs = [setting1, setting2, s2, s3, s6, s7, s8, s9, s11, s12, s13, s14, s15, s17, s20, s21], outputs = preds)
model.compile(loss = 'mean_squared_error', optimizer = 'Adam', metrics = ['MAPE'])
history = model.fit(x = [setting1_train_, setting2_train_, s2_train_, s3_train_, s6_train_, s7_train_, s8_train_, s9_train_, s11_train_, s12_train_, s13_train_, s14_train_, s15_train_,
s17_train_, s20_train_, s21_train_], y = target_train_, validation_data = ([setting1_dev_, setting2_dev_, s2_dev_, s3_dev_, s6_dev_, s7_dev_, s8_dev_, s9_dev_,
s11_dev_, s12_dev_, s13_dev_, s14_dev_, s15_dev_,s17_dev_, s20_dev_, s21_dev_], target_dev_), epochs = epochs)
evaluation = model.evaluate(x = [setting1_dev_, setting2_dev_, s2_dev_, s3_dev_, s6_dev_, s7_dev_, s8_dev_, s9_dev_, s11_dev_, s12_dev_, s13_dev_, s14_dev_, s15_dev_,
s17_dev_, s20_dev_, s21_dev_], y = target_dev_)
#preds = model.predict(x = [setting1_dev_, setting2_dev_, s2_dev_, s3_dev_, s6_dev_, s7_dev_, s8_dev_, s9_dev_, s11_dev_, s12_dev_, s13_dev_, s14_dev_, s15_dev_,
# s17_dev_, s20_dev_, s21_dev_])
#pd.Series(target_dev_).plot()
#pd.Series(preds1.ravel()).plot(color= 'red')
Experiment_results = {}
Experiment_results['model'] = model
Experiment_results['history'] = history
Experiment_results['evaluation'] = evaluation
return(Experiment_results)
def pickle_save(my_object, name, path = ''):
import pickle
import os
if path == '':
path = os.getcwd()
filename = path + '\\' + name + '.pkl'
with open(filename, 'wb') as f:
pickle.dump(my_object, f, pickle.HIGHEST_PROTOCOL)
epochs = 2 # Here I set the number of epochs
#This code runs experiments with random values of parameters and stores them in a dictionary named Experiments
%%time
for i in tqdm(range(10, 159)):
filters1 = np.random.choice([2**4, 2**5, 2**6, 2**7, 2**8, 2**9])
filters2 = np.random.choice([2**4, 2**5, 2**6, 2**7, 2**8, 2**9])
kernel_size1 = (np.random.choice([2,3, 4, 5]),)
kernel_size2 = (np.random.choice([2,3, 4, 5]),)
Experiment_results = f_compile_fit_evaluate_model1(filters1, kernel_size1 ,filters2, kernel_size2, epochs )
Experiments[i] = {'filters1' : filters1, 'kernel_size1' : kernel_size1, 'filters2' : filters2, 'kernel_size2' : kernel_size2, 'epochs' : epochs,
'MAPE' : Experiment_results['evaluation'][1], 'Experiment_results' : Experiment_results}
pickle_save(Experiments, 'Experiments1')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-85-b583b263ca6d> in <module>
----> 1 pickle_save(Experiments, 'Experiments1')
<ipython-input-7-d949b816cd60> in pickle_save(my_object, name, path)
90 with open(filename, 'wb') as f:
91
---> 92 pickle.dump(my_object, f, pickle.HIGHEST_PROTOCOL)
93
94
TypeError: can't pickle _thread.RLock objects
是什么原因引起的问题?我该如何解决?