成功解决OSError: Unable to create link (name already exists)

问题描述:在使用TensorFlow保存加入了自定义卷积层的模型时,出现如下错误

`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
OSError: Unable to create link (name already exists)

出现原因:将训练好的模型保存为h5格式时,由于一些变量名的重复引起报错。

解决办法

    1. 首先使用如下代码,查看重复的变量
for i, w in enumerate(model.weights):
    print(i, w.name)

得到如下结果:发现自定义的my_layer层【2,3】的两个参数名完全一致,这就是问题出现的原因。
成功解决OSError: Unable to create link (name already exists)_第1张图片
2. 找到my_layer层,百度tf.Varible()函数得知,这个函数可以会出现命名冲突的问题,有些版本系统能够自己处理,我使用的是tf2.2,猜测可能是这个版本原因的问题(我也是小白,自己猜测的)

self.weight = tf.Variable(tf.random.normal([self.kernel_size, self.kernel_size, input_shape[-1], self.filter]))
self.bias = tf.Variable(tf.random.normal([self.filter]))

3.尝试:对使用tf.Varible()函数新建的变量进行变量名自定义。
使用tf.Varible()自带的关键字参数name。代码如下

self.weight = tf.Variable(tf.random.normal([self.kernel_size, self.kernel_size, input_shape[-1], self.filter]), name='v1')
self.bias = tf.Variable(tf.random.normal([self.filter]), name='v2')

4.结果:my_layer层的两个参数名发生了改变,错误消失,模型成功保存。
成功解决OSError: Unable to create link (name already exists)_第2张图片

你可能感兴趣的:(python,tensorflow,深度学习)