Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow 2.x:无法以h5格式保存经过培训的模型(操作错误:无法创建链接(名称已存在))_Python_Tensorflow_Machine Learning_Keras_H5py - Fatal编程技术网

Python TensorFlow 2.x:无法以h5格式保存经过培训的模型(操作错误:无法创建链接(名称已存在))

Python TensorFlow 2.x:无法以h5格式保存经过培训的模型(操作错误:无法创建链接(名称已存在)),python,tensorflow,machine-learning,keras,h5py,Python,Tensorflow,Machine Learning,Keras,H5py,我的模型使用预处理的数据来预测客户是私人客户还是非私人客户。预处理步骤是使用诸如feature_column.bucketized_column(…)、feature_column.Embedded_column(…)等步骤。 培训后,我试图保存模型,但出现以下错误: 文件“h5py_objects.pyx”,第54行,在h5py.\u objects.with_phil.wrapper中 文件“h5py_objects.pyx”,第55行,在h5py.\u objects.with_phil.

我的模型使用预处理的数据来预测客户是私人客户还是非私人客户。预处理步骤是使用诸如feature_column.bucketized_column(…)、feature_column.Embedded_column(…)等步骤。 培训后,我试图保存模型,但出现以下错误:

文件“h5py_objects.pyx”,第54行,在h5py.\u objects.with_phil.wrapper中
文件“h5py_objects.pyx”,第55行,在h5py.\u objects.with_phil.wrapper中
文件“h5py\h5o.pyx”,第202行,在h5py.h5o.link中
OSError:无法创建链接(名称已存在)

我尝试了以下方法来解决我的问题:

  • 我试图排除这里提到的优化器:
  • 我尝试了TensorFlow的不同版本,比如2.2和2.3
  • 我尝试重新安装h5py,如下所述:
一切都没有成功

以下是模型的相关代码:

(功能列、列、值、测试)=预处理.getPrepreprocessedDataset(args.data、args.zip、args.batchSize)
特征层=tf.keras.layers.DenseFeatures(特征列,可训练=假)
模型=tf.keras.models.Sequential([
特征层,
致密(1,活化=tf.nn.sigmoid)
])
model.compile(优化器='sgd',
损失='binary\u交叉熵',
指标=[‘准确度’])
paramString=“Arg-e{}-b{}-z{}”。格式(args.epoch、args.batchSize、bucketSizeGEO)
...
模型安装(列车),
验证数据=val\U ds,
epochs=args.epoch,
回调=[tensorboard_回调])
model.summary()
损失,精度=模型评估(测试)
打印(“准确度”,准确度)
paramString=paramString+“-a{.4f}”。格式(精度)
outputName=“logReg”+datetime.datetime.now().strftime(“%Y%m%d-%H%m%S”)+paramStrin
如果args.saveModel:
filepath=“./saved_models/”+outputName+“.h5”
model.save(文件路径,save_format='h5')
预处理模块中调用的函数:

def GetPrepreprocessedDataset(文件路径、zippath、批大小、bucketSizeGEO):
打印(“开始预处理…”)
路径=文件路径
数据=pd.read\u csv(路径,数据类型={
“名称1”:名词短语,
“名称2”:名词短语,
“EMAIL1”:np.str,
“ZIP”:np.str_u2;,
“街道”:np.str,
“经度”:np.floating,
“纬度”:np.floating,
“接收方类型”:np.int64})
功能_列=[]
data=data.fillna(“NaN”)
数据=\预处理名称(数据)
数据=_u(数据)
列车,试验=列车试验分割(数据,试验尺寸=0.2,随机状态=0)
列车,val=列车试验分离(列车,试验尺寸=0.2,随机状态=0)
列车ds=uuuu df_u至_u数据集(列车、批次大小=批次大小)
val\U ds=\uuuu df\u to\u数据集(val,shuffle=False,batch\u size=batch\u size)
test\u ds=\uuuuu df\u to\u数据集(test,shuffle=False,batch\u size=batch\u size)
__BuildFeatureColumns(feature_列、数据、zippath、bucketSizeGEO、True)
打印(“预处理完成”)
返回(特征列、列、值、测试)
调用功能的不同预处理函数:

def\u构建特性列(特性列、数据、zippath、bucketSizeGEO、addCrossedFeatures):
feature_columns.append(u getFutureColumnLon(bucketSizeGEO))
feature_columns.append(u getFutureColumnLat(bucketSizeGEO))
(namew1\u one\u hot,namew2\u one\u hot)=\uuuu获取未来列名称(\uu获取numberofwords(数据,'NAME1PRO'))
功能列。附加(名称W1\U one\U hot)
feature_columns.append(namew2_one_hot)
feature_columns.append(uuu getFutureColumnStreet(uu getNumberOfWords(数据,'STREETPRO'))
feature_columns.append(uu getFutureColumnZIP(2223,zippath))
如果添加交叉功能:
feature_columns.append(uu getFutureColumnCrossedNames(100))
feature_columns.append(uu getFutureColumnCrossedZIPStreet(1002223,zippath))
与嵌入相关的功能:

def\uuu getFutureColumnsName(名称\uNum\uWords):
词汇表=np.arange(0,name\u num\u words+1,1).tolist()
名称1\u voc=tf.feature\u column.categorical\u column\u带词汇表(
key='NAME1W1',词汇表=词汇表,dtype=tf.dtypes.int64)
namew2\u voc=tf.feature\u column.categorical\u column\u带有词汇表(
key='NAME1W2',词汇表=词汇表,dtype=tf.dtypes.int64)
dim=\uuuuGetNumberOfDimensions(名称\uNum\uWords)
namew1_嵌入=特征_列。嵌入_列(namew1_voc,维度=尺寸)
namew2\u嵌入=特征列。嵌入列(namew2\u voc,维度=dim)
返回(namew1_嵌入,namew2_嵌入)
def\uu getFutureColumnStreet(street\u num\u单词):
词汇表=np.arange(0,street\u num\u单词+1,1).tolist()
街道voc=tf.feature\u column.categorical\u column\u与词汇表(
key='STREETW',词汇表=词汇表,dtype=tf.dtypes.int64)
dim=\uuuu getNumberOfDimensions(street\uNum\uWords)
街道嵌入=要素列。嵌入列(街道voc,尺寸=尺寸)
返回街
def\uuu getFutureColumnZIP(zip\uNum\uWords,zippath):
zip\u voc=功能列。分类列,带词汇表文件(
key='ZIP',词汇表文件=zippath,词汇表大小=ZIP\u num\u单词,
默认值(0)
dim=\uuuu getNumberOfDimensions(zip\uNum\uWords)
zip\U嵌入=特征列。嵌入列(zip\U voc,维度=dim)
返回压缩包嵌入

以h5格式保存模型时出现的错误
o错误:无法创建链接(名称已存在)
是由一些重复的变量名称引起的。在enumerate(model.weights)中通过
检查i,w:print(i,w.name)
显示它们是嵌入的权重名称

通常,在构建
feature\u列
时,传递到每个feature列中的distinct
将用于构建distinct变量
名称
for i in range(len(model.weights)):
    model.weights[i]._handle_name = model.weights[i].name + "_" + str(i)