Tensorflow 使用经过培训的模型作为最终层,无需交叉验证

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

我目前有一个自定义的tensorflow模型model_a,我想将它用作另一个模型的输出。我想交叉验证整个新模型,但我有以下问题:


如果我定义

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())