Python 迭代h5文件中的数据集,但更改成功';无法挽救
我试图通过对h5文件中的数据集应用某种(一个热位)函数来修改模型的权重,然后用新的权重加载模型。我终于想出了如何在h5文件中的不同数据集形状上应用mu函数。问题是,在关闭文件并尝试重新打开它并打印任何数据集后,将打印原始数据集值,而不是修改的数据集值。 这是密码Python 迭代h5文件中的数据集,但更改成功';无法挽救,python,python-3.x,numpy,conv-neural-network,h5py,Python,Python 3.x,Numpy,Conv Neural Network,H5py,我试图通过对h5文件中的数据集应用某种(一个热位)函数来修改模型的权重,然后用新的权重加载模型。我终于想出了如何在h5文件中的不同数据集形状上应用mu函数。问题是,在关闭文件并尝试重新打开它并打印任何数据集后,将打印原始数据集值,而不是修改的数据集值。 这是密码 f1 = h5py.File('/content/model_weights.h5', 'r') # open the file for dset in traverse_datasets('/content/model_wei
f1 = h5py.File('/content/model_weights.h5', 'r') # open the file
for dset in traverse_datasets('/content/model_weights.h5'):
dataset1 = np.array(hdf.get(dset))
for x in np.nditer(dataset1, op_flags=['writeonly']):
x[...]= one_hot_bit_val(x)
print(dataset1)
f1.close()
traverse_datasets是查找h5文件中的数据集路径,one_hot_bit_val()是我修改权重的函数。我在循环时打印每个数据集,打印的值是正确的。当我关闭文件后再次尝试重新打印时,如下所示:
f1 = h5py.File('/content/model_weights.h5', 'r') # open the file
dataset1 = np.array(f1.get('/conv2d_1/conv2d_1/bias:0'))
print(dataset1)
dataset1在应用one_hot_bit函数之前具有原始值。您正在修改从数据集而不是数据集本身创建的数组。查看h5py文档,了解如何将新值写入数据集。我认为使用nditer没有帮助。它并不比普通迭代快多少。但这不是问题所在。好的,谢谢你的帮助
ds=hdf.get(dset)
arr=ds[:]
获取<代码>ds[:]=要设置的arr。