Tensorflow 使用经过培训的模型作为最终层,无需交叉验证
我目前有一个自定义的tensorflow模型model_a,我想将它用作另一个模型的输出。我想交叉验证整个新模型,但我有以下问题:Tensorflow 使用经过培训的模型作为最终层,无需交叉验证,tensorflow,neural-network,Tensorflow,Neural Network,我目前有一个自定义的tensorflow模型model_a,我想将它用作另一个模型的输出。我想交叉验证整个新模型,但我有以下问题: 如果我定义 model_copy= model_A 然后训练: model_copy.fit(X_train,y_train) 然后,这会影响原始模型。也就是说,在训练模型副本后,模型预测(X列车)将不再等于模型预测(X列车)。。。如何避免这个问题 我的实施详情: 通过随机网格搜索确定最佳参数后,我执行以下操作: best_params = model1.b
如果我定义
model_copy= model_A
然后训练:
model_copy.fit(X_train,y_train)
然后,这会影响原始模型。也就是说,在训练模型副本后,模型预测(X列车)将不再等于模型预测(X列车)。。。如何避免这个问题
我的实施详情: 通过随机网格搜索确定最佳参数后,我执行以下操作:
best_params = model1.best_params_
input_shape_model1 = tf.keras.Input(shape=(best_params['input_dim'],))
deep_readout = fullyConnected_Dense(best_params['height'])(input_shape_model1)
for i in range(best_params['depth']):
# Activation
layer= tf.nn.relu(layer)
layer=fullyConnected_Dense(best_params['height'])(layer)
out_model1 = fullyConnected_Dense(1)(layer)
best_deep_readout_map = tf.keras.Model(input_shape_model1, out_model1)
opt_model1 = Adam(lr=best_params['learning_rate']) best_model1.compile(optimizer=opt_readout, loss="mae", metrics=["mse", "mae", "mape"])
best_model1.fit(X_concat,z_concat, epochs=best_params['epochs'],
batch_size=
最佳参数[‘批量大小’])
这样做之后。。。我试图保存:
best_model1.save('~/Desktop/models/full_max/')
我得到了这个错误:
错误:
AttributeError Traceback (most recent call last) <ipython-input-208-c4e56870b2c0> in <module>
----> 1 best_deep_readout_map.save('~/Desktop/models/full_max/')
~/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/engine/network.py in save(self, filepath, overwrite, include_optimizer, save_format, signatures, options) 1006 """ 1007 save.save_model(self, filepath, overwrite, include_optimizer, save_format,
-> 1008 signatures, options) 1009 1010 def save_weights(self, filepath, overwrite=True, save_format=None):
~/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/save.py in save_model(model, filepath, overwrite, include_optimizer, save_format, signatures, options)
113 else:
114 saved_model_save.save(model, filepath, overwrite, include_optimizer,
--> 115 signatures, options)
116
117
~/.local/lib/python3.7/site-packages/tensorflow_core/python/keras/saving/saved_model/save.py in save(model, filepath, overwrite, include_optimizer, signatures, options)
76 # we use the default replica context here.
77 with distribution_strategy_context._get_default_replica_context(): # pylint: disable=protected-access
---> 78 save_lib.save(model, filepath, signatures, options)
79
80 if not include_optimizer:
~/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/save.py in save(obj, export_dir, signatures, options)
897 # Note we run this twice since, while constructing the view the first time
898 # there can be side effects of creating variables.
--> 899 _ = _SaveableView(checkpoint_graph_view)
900 saveable_view = _SaveableView(checkpoint_graph_view)
901
~/.local/lib/python3.7/site-packages/tensorflow_core/python/saved_model/save.py in __init__(self, checkpoint_view)
163 self.checkpoint_view = checkpoint_view
164 trackable_objects, node_ids, slot_variables = (
--> 165 self.checkpoint_view.objects_ids_and_slot_variables())
166 self.nodes = trackable_objects
167 self.node_ids = node_ids
~/.local/lib/python3.7/site-packages/tensorflow_core/python/training/tracking/graph_view.py in objects_ids_and_slot_variables(self)
416 object_names = object_identity.ObjectIdentityDictionary()
417 for obj, path in path_to_root.items():
--> 418 object_names[obj] = _object_prefix_from_path(path)
419 node_ids = object_identity.ObjectIdentityDictionary()
420 for node_id, node in enumerate(trackable_objects):
~/.local/lib/python3.7/site-packages/tensorflow_core/python/training/tracking/graph_view.py in _object_prefix_from_path(path_to_root)
62 return "/".join(
63 (_escape_local_name(trackable.name)
---> 64 for trackable in path_to_root))
65
66
~/.local/lib/python3.7/site-packages/tensorflow_core/python/training/tracking/graph_view.py in <genexpr>(.0)
62 return "/".join(
63 (_escape_local_name(trackable.name)
---> 64 for trackable in path_to_root))
65
66
~/.local/lib/python3.7/site-packages/tensorflow_core/python/training/tracking/graph_view.py in _escape_local_name(name)
55 # edges traversed to reach the variable, so we escape forward slashes in
56 # names.
---> 57 return (name.replace(_ESCAPE_CHAR, _ESCAPE_CHAR + _ESCAPE_CHAR)
58 .replace(r"/", _ESCAPE_CHAR + "S"))
59
**AttributeError: 'NoneType' object has no attribute 'replace'**
AttributeError回溯(最近一次调用最后一次)
---->1最佳深度读取地图。保存(“~/Desktop/models/full\u max/”)
保存中的~/.local/lib/python3.7/site-packages/tensorflow\u core/python/keras/engine/network.py(self,filepath,overwrite,include\u optimizer,save\u格式,签名,选项)1006”“”1007保存。保存模型(self,filepath,overwrite,include\u optimizer,save\u格式,
->1008签名,选项)1009 1010 def保存权重(self,filepath,overwrite=True,save\u format=None):
保存模型中的~/.local/lib/python3.7/site-packages/tensorflow\u core/python/keras/saving/save.py(模型、文件路径、覆盖、包括优化器、保存格式、签名、选项)
113其他:
114保存的\u模型\u保存。保存(模型、文件路径、覆盖、包含\u优化器、,
-->115个签名、选项)
116
117
保存中的~/.local/lib/python3.7/site-packages/tensorflow\u core/python/keras/saving/saving\u model/save.py(模型、文件路径、覆盖,包括\u优化器、签名、选项)
76#我们在这里使用默认副本上下文。
77使用分发策略上下文。获取默认副本上下文()
--->78保存库保存(模型、文件路径、签名、选项)
79
80如果不包括\u优化器:
保存中的~/.local/lib/python3.7/site-packages/tensorflow\u core/python/saved\u model/save.py(obj、导出目录、签名、选项)
897#注意,我们在第一次构建视图时运行了两次
898#创建变量可能会产生副作用。
-->899=可保存视图(检查点图视图)
900可保存视图=_可保存视图(检查点图视图)
901
~/.local/lib/python3.7/site-packages/tensorflow\u core/python/saved\u model/save.py in\uuuuuu init\uuuuuu(self,checkpoint\u视图)
163 self.checkpoint\u视图=checkpoint\u视图
164可跟踪的\u对象、节点\u ID、插槽\u变量=(
-->165 self.checkpoint\u view.objects\u id\u和\u slot\u variables())
166 self.nodes=可跟踪的\u对象
167 self.node_id=节点_id
对象和插槽变量中的~/.local/lib/python3.7/site-packages/tensorflow\u core/python/training/tracking/graph\u view.py(self)
416对象名称=对象标识。对象标识字典()
417对于obj,路径_到_根目录中的路径。项()
-->418对象名称[obj]=来自路径(路径)的对象前缀
419节点标识=对象标识。对象标识字典()
420对于节点\ id,枚举中的节点(可跟踪\对象):
~/.local/lib/python3.7/site-packages/tensorflow\u core/python/training/tracking/graph\u view.py in\u object\u prefix\u from\u path(path\u to\u root)
62返回“/”加入(
63(_escape_local_name(trackable.name))
--->64用于可在路径(U到(U根)中跟踪)
65
66
~/.local/lib/python3.7/site-packages/tensorflow\u core/python/training/tracking/graph\u view.py in(.0)
62返回“/”加入(
63(_escape_local_name(trackable.name))
--->64用于可在路径(U到(U根)中跟踪)
65
66
~/.local/lib/python3.7/site-packages/tensorflow\u core/python/training/tracking/graph\u view.py in\u escape\u local\u name(name)
55#遍历边以到达变量,因此在
56个名字。
--->57返回(名称.替换(_ESCAPE_CHAR,_ESCAPE_CHAR+_ESCAPE_CHAR)
58.替换(r“/”,_ESCAPE_CHAR+“S”))
59
**AttributeError:“非类型”对象没有属性“替换”**
它将影响原始模型,因为Python就是这样工作的,它使用引用,所以实际上它们指向相同的内存位置
如果您想确保您有不同的模型,不管您打算对它们做什么,您都可以创建一个返回特定模型X的函数
例如
但是,我建议您使用model.save()
将权重和体系结构保存在一起。同时,使用tf.keras.models.load\u model()
加载模型并防止每次重新培训
如果要传递权重,可以使用:
model_2.set_weights(model_1.get_weights())
但在这种情况下,我每次都必须重新拟合model1…否?如果我改为写:initialized_weights=modela.weights,那会起作用吗?是的,这就是为什么我建议您使用model.save和model.load()。如果您想使用初始化的_weights,请检查上面更新的答案:DIt听起来不错,但当我运行时:model1.save(“~/Desktop/models/full_max/”)我得到了一个错误:AttributeError:“NoneType”对象没有属性“replace”我很高兴你学会了!这就是社区应该始终保持的样子,一个学习的绿洲:DIt真的是如此。再次非常感谢Timbus!:)
model_2.set_weights(model_1.get_weights())