python - 如何复制和保存 keras adabound 模型?
问题描述
我正在使用 Kfold 进行 ML,我没有成功复制和保存 adabound keras 模型,但是,相同的代码对 adam 和 sgd 都很好,任何关于如何复制、保存和重用 adabound 模型的帮助都会很棒.
另外,我使用 model1 = deepcopy(model) 而不是使用 model1.save('my_class.h5') 保存它,并使用 new_model = models.load_model('my_class.h5') 预测加载它
for train, test in kfold.split(X, Y):
# create model
model = Sequential()
print('model',type(model))
model.add(Dense(250, input_dim=train_inputs.shape[1],
activation='relu'))
model.add(Dropout(0.))
model.add(Dense(250, activation='relu'))
model.add(Dense(1, activation='linear'))
model.compile(loss='mean_squared_error', optimizer=opti_Bound,
metrics=['accuracy'])
history = model.fit(X[train], Y[train], \
validation_data=(X[test], Y[test]), \
epochs=2,batch_size=1000, verbose=2)
_, train_acc = model.evaluate(X[train], Y[train], verbose=0)
_, test_acc = model.evaluate(X[test], Y[test], verbose=0)
print('Train: %.3f, Test: %.3f' % (train_acc, test_acc))
if test_acc>=accc_tst and train_acc>=accc_trn:
accc_tst=test_acc
accc_trn=train_acc
model1=deepcopy(model)
plt.plot(history.history['acc'], label='train')
plt.plot(history.history['val_acc'], label='test')
plt.legend()
plt.show()
cvscores.append(test_acc * 100)
print("%.2f%% (+/- %.2f%%)" % (np.mean(cvscores),np.std(cvscores)))
model1.save('my_class.h5')
不久我得到了这个错误:
ValueError Traceback (most recent
call last)
<ipython-input-4-43690e87e00a> in <module>()
34 accc_tst=test_acc
35 accc_trn=train_acc
---> 36 model1=deepcopy(model)
37
38 # plot history
/usr/lib/python3.6/copy.py in deepcopy(x, memo, _nil)
178 y = x
179 else:
--> 180 y = _reconstruct(x, memo, *rv)
181
182 # If is its own copy, don't memoize.
/usr/lib/python3.6/copy.py in _reconstruct(x, memo, func, args,
state, listiter, dictiter, deepcopy)
280 state = deepcopy(state, memo)
281 if hasattr(y, '__setstate__'):
--> 282 y.__setstate__(state)
283 else:
284 if isinstance(state, tuple) and len(state) ==
2:
/usr/local/lib/python3.6/dist-packages/keras/engine/network.py in
__setstate__(self, state)
1264
1265 def __setstate__(self, state):
-> 1266 model = saving.unpickle_model(state)
1267 self.__dict__.update(model.__dict__)
1268
/usr/local/lib/python3.6/dist-packages/keras/engine/saving.py in
unpickle_model(state)
433 def unpickle_model(state):
434 f = h5dict(state, mode='r')
--> 435 return _deserialize_model(f)
436
437
/usr/local/lib/python3.6/dist-packages/keras/engine/saving.py in
_deserialize_model(f, custom_objects, compile)
297 optimizer_config =
training_config['optimizer_config']
298 optimizer =
optimizers.deserialize(optimizer_config,
--> 299
custom_objects=custom_objects)
300
301 # Recover loss functions and metrics.
/usr/local/lib/python3.6/dist-packages/keras/optimizers.py in
deserialize(config, custom_objects)
766
module_objects=all_classes,
767
custom_objects=custom_objects,
--> 768
printable_module_name='optimizer')
769
770
/usr/local/lib/python3.6/dist-packages/keras/utils/generic_utils.py
in deserialize_keras_object(identifier, module_objects,
custom_objects, printable_module_name)
136 if cls is None:
137 raise ValueError('Unknown ' +
printable_module_name +
--> 138 ': ' + class_name)
139 if hasattr(cls, 'from_config'):
140 custom_objects = custom_objects or {}
ValueError: Unknown optimizer: AdaBound
我怀疑,如果我尝试保存和加载该优化器,我也会得到错误。所以我实际上正在寻找使用 keras 复制、保存和重用\重新加载 adabound 的方法。
解决方案
推荐阅读
- node.js - 从存储在本地存储 angular + nodejs 中的令牌中获取用户信息
- sockets - 来自电子邮件地址的邮件提交代理(MSA)服务器主机名通过 C++
- ios - 在 Swift4 中播放声音
- json - 在视图 django 之间传递模型对象(对象不是 JSON 可序列化的)
- ruby-on-rails - 如何找到某个 Ruby 版本或 Rails 版本使用哪个 Gem 版本
- csv - 如何使用 shell 中的 sed 仅在 .csv 文件的第一列中更改日期格式
- sql - 根据同一行的值更新行
- mvvmcross - WPF 应用程序中的自定义视图演示者
- assembly - 如何使用 NASM 调用位于后两个扇区的代码?
- mysql - 为什么我不能在两个表中使用触发器来将数据保存在第一个表中?最好的方法是什么?