Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.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 迭代h5文件中的数据集,但更改成功';无法挽救_Python_Python 3.x_Numpy_Conv Neural Network_H5py - Fatal编程技术网

Python 迭代h5文件中的数据集,但更改成功';无法挽救

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

我试图通过对h5文件中的数据集应用某种(一个热位)函数来修改模型的权重,然后用新的权重加载模型。我终于想出了如何在h5文件中的不同数据集形状上应用mu函数。问题是,在关闭文件并尝试重新打开它并打印任何数据集后,将打印原始数据集值,而不是修改的数据集值。 这是密码

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。