回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我无法保存Keras模型,因为我遇到了标题中提到的错误。我一直在使用tensorflow gpu。我的模型由4个输入组成,每个输入是一个ResNet50。当我只使用一个输入时,下面的回调工作得很好,但是使用多个输入时,我得到了以下错误:</p>
<blockquote>
<p>RuntimeError: Unable to create link (name already exists)</p>
</blockquote>
<pre><code>callbacks = [EarlyStopping(monitor='val_loss', patience=30,mode='min', min_delta=0.0001, verbose=1),
ModelCheckpoint(checkpoint_path, monitor='val_loss',save_best_only=True, mode='min', verbose=1)
]
</code></pre>
<p>现在,如果没有回调,我无法在培训结束时保存模型,因为我遇到了相同的错误,但我能够使用以下代码<a href="https://github.com/tensorflow/tensorflow/issues/27688#issuecomment-504077960" rel="nofollow noreferrer">found here</a>修复该错误:</p>
<pre><code>from tensorflow.python.keras import backend as K
with K.name_scope(model.optimizer.__class__.__name__):
for i, var in enumerate(model.optimizer.weights):
name = 'variable{}'.format(i)
model.optimizer.weights[i] = tf.Variable(var, name=name)
</code></pre>
<p>此代码仅适用于单输入模型,并放在训练函数<code>model.fit</code>之后</p>
<p>对于回调,即使上面的代码也不起作用。这篇文章与我的<a href="https://stackoverflow.com/questions/64105553/getting-an-error-with-a-multi-input-keras">previous one</a>有某种关联</p>
<p>我已经读到这个问题可以用<code>tf-nightly</code>来解决,所以我尝试了,但没有成功</p>
<p>我已经用a <a href="https://colab.research.google.com/drive/1_yqIkVU4H9b8k-sMPGf-FjH7Dzy6s7PO?usp=sharing" rel="nofollow noreferrer">standalone code and generated data in a Google colab and it worked</a>测试过了。所以我检查了tf版本,它和我的一样<code>2.3.0</code>。至于cuda,colab和我的机器都在运行:</p>
<pre><code>nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
</code></pre>
<p>这可能是问题所在吗</p>
<p><strong>更新:</strong></p>
<p>以下是输出错误:</p>
<pre><code>113/113 [==============================] - ETA: 0s - loss: 30.0107 - mae: 1.3525
Epoch 00001: val_loss improved from inf to 0.18677, saving model to saved_models/multi_channel_model.h5
Traceback (most recent call last):
File "fine_tuning.py", line 111, in <module>
run()
File "fine_tuning.py", line 104, in run
model.fit(x=train_x_list, y=train_y, validation_split=0.2,
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 108, in _method_wrapper
return method(self, *args, **kwargs)
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1137, in fit
callbacks.on_epoch_end(epoch, epoch_logs)
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/callbacks.py", line 412, in on_epoch_end
callback.on_epoch_end(epoch, logs)
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/callbacks.py", line 1249, in on_epoch_end
self._save_model(epoch=epoch, logs=logs)
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/callbacks.py", line 1301, in _save_model
self.model.save(filepath, overwrite=True, options=self._options)
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/engine/training.py", line 1978, in save
save.save_model(self, filepath, overwrite, include_optimizer, save_format,
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/save.py", line 130, in save_model
hdf5_format.save_model_to_hdf5(
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/hdf5_format.py", line 125, in save_model_to_hdf5
save_optimizer_weights_to_hdf5_group(f, model.optimizer)
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/tensorflow/python/keras/saving/hdf5_format.py", line 593, in save_optimizer_weights_to_hdf5_group
param_dset = weights_group.create_dataset(
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/h5py/_hl/group.py", line 139, in create_dataset
self[name] = dset
File "/home/abderrezzaq/.local/lib/python3.8/site-packages/h5py/_hl/group.py", line 373, in __setitem__
h5o.link(obj.id, self.id, name, lcpl=lcpl, lapl=self._lapl)
File "h5py/_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
File "h5py/_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
File "h5py/h5o.pyx", line 202, in h5py.h5o.link
RuntimeError: Unable to create link (name already exists)
</code></pre>