Python 是否有一个tensorflow函数将来自不同折叠的.h5权重组合成一组权重?

Python 是否有一个tensorflow函数将来自不同折叠的.h5权重组合成一组权重?,python,tensorflow,Python,Tensorflow,我正在训练一个具有k倍验证的模型,并以.h5文件的形式从每个倍中获取权重。是否有一个Tensorflow函数允许我将所有这些权重合并到一个.h5文件中?那么,它会取每层的重量,然后在褶皱上取平均值?提前感谢。没有TensorFlow函数可以完成您想要做的事情。但是,您可以使用其他方法来完成 首先,您必须读取生成的每个h5文件,并找到数据在层次结构中的存储位置 # A recursive function to get path of dataset element inside the 'enc

我正在训练一个具有k倍验证的模型,并以.h5文件的形式从每个倍中获取权重。是否有一个Tensorflow函数允许我将所有这些权重合并到一个.h5文件中?那么,它会取每层的重量,然后在褶皱上取平均值?提前感谢。

没有TensorFlow函数可以完成您想要做的事情。但是,您可以使用其他方法来完成

首先,您必须读取生成的每个h5文件,并找到数据在层次结构中的存储位置

# A recursive function to get path of dataset element inside the 'encoded_weight.h5'

def traverse_datasets(hdf_file):

    def h5py_dataset_iterator(g, prefix=''):
        for key in g.keys():
            item = g[key]
            path = f'{prefix}/{key}'
            if isinstance(item, h5py.Dataset): # test for dataset
                yield (path, item)
            elif isinstance(item, h5py.Group): # test for group (go down)
                yield from h5py_dataset_iterator(item, path)

    for path, _ in h5py_dataset_iterator(hdf_file):
        yield path

import h5py
filename = "encoded_weight.h5"

hf = h5py.File(filename, "r")

for dset in traverse_datasets(hf):
    print('Path:', dset)
    print(hf[dset])
#     print(np.array(hf[dset]))   # Contains you array
    print('-----------------------')
输出:

Path: /dense/dense/bias:0
<HDF5 dataset "bias:0": shape (6,), type "<f4">
-----------------------
Path: /dense/dense/kernel:0
<HDF5 dataset "kernel:0": shape (13, 6), type "<f4">
-----------------------
Path: /dense_1/dense_1/bias:0
<HDF5 dataset "bias:0": shape (2,), type "<f4">
-----------------------
Path: /dense_1/dense_1/kernel:0
<HDF5 dataset "kernel:0": shape (6, 2), type "<f4">
-----------------------
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0., 0., 0., 0., 0., 0.], dtype=float32)>
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5], dtype=float32)>
输出:

Path: /dense/dense/bias:0
<HDF5 dataset "bias:0": shape (6,), type "<f4">
-----------------------
Path: /dense/dense/kernel:0
<HDF5 dataset "kernel:0": shape (13, 6), type "<f4">
-----------------------
Path: /dense_1/dense_1/bias:0
<HDF5 dataset "bias:0": shape (2,), type "<f4">
-----------------------
Path: /dense_1/dense_1/kernel:0
<HDF5 dataset "kernel:0": shape (6, 2), type "<f4">
-----------------------
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0., 0., 0., 0., 0., 0.], dtype=float32)>
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5], dtype=float32)>
输出:

Path: /dense/dense/bias:0
<HDF5 dataset "bias:0": shape (6,), type "<f4">
-----------------------
Path: /dense/dense/kernel:0
<HDF5 dataset "kernel:0": shape (13, 6), type "<f4">
-----------------------
Path: /dense_1/dense_1/bias:0
<HDF5 dataset "bias:0": shape (2,), type "<f4">
-----------------------
Path: /dense_1/dense_1/kernel:0
<HDF5 dataset "kernel:0": shape (6, 2), type "<f4">
-----------------------
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0., 0., 0., 0., 0., 0.], dtype=float32)>
<tf.Tensor: shape=(6,), dtype=float32, numpy=array([0.5, 0.5, 0.5, 0.5, 0.5, 0.5], dtype=float32)>

w2是形状相同的张量,但有元素1

之后,可以使用图层的“设置权重”特性指定权重

看一看

注意:如果你认为这会提高你的准确性,那你就错了。
看一看

如果答案有效,你能接受并投票吗?目标并不是提高准确性,如果我想的话,我只需要对所有数据进行训练。更重要的是工作流程,如果运行k-fold验证需要4个小时,我不想再花一个小时对所有数据进行培训。