- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
您好,我有一个模型想要使用迁移学习。我有另一个模型,我已经训练并保存了它的权重。我想做的是将之前训练的模型中的前几个权重加载到这个具有相同层的新模型中,但我在最后添加了更多层。如何将前几层的权重加载到我的新模型中?
这是我尝试过的:
def load_custom_weights(model, data, layer_indices):
weights = [data[p] for p in layer_indices]
print(model.weights)
model.set_weights(weights)
print(model.get_weights())
return model
filename = 'unimodal_weights/best_weight_image_only_k-fold_1.hdf5'
f = h5py.File(filename, 'r')
img_data = f['model_weights']['Image_Branch']['Image_Branch_2']
img = get_img_branch()
img = load_custom_weights(img, img_data, list(img_data))
该模型似乎加载了权重,但即使我们从中获取权重的模型得分很好,但我的准确性非常低。
有什么方法可以检查我的模型是否确实加载了权重?
编辑:它们都是多 GPU 模型
编辑2:
所以我的模型有点棘手,我的模型中嵌入了一个顺序模型。我想将权重加载到其中一个分支,特别是图像分支
这是我的模型的样子:
图像分支:
def get_img_branch():
Image_Branch = Sequential(name='Image_Branch')
#block 1
Image_Branch.add(Conv2D(64, kernel_size=(3,3), activation='relu', padding='valid', kernel_initializer='he_normal', name='block1_conv1'))
Image_Branch.add(BatchNormalization())
Image_Branch.add(Conv2D(64, kernel_size=(3,3), activation='relu', padding='valid', kernel_initializer='he_normal', name='block1_conv2'))
Image_Branch.add(BatchNormalization())
Image_Branch.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name='block1_pool'))
...SNIP...
#Flatten
Image_Branch.add(Flatten())
return Image_Branch
封装模型
image_input = Input(shape, name='image_input')
#get branches
img = get_img_branch()
#set up our image branch
image_branch = (img)(image_input)
...SNIP
我们可以看到我们已经获取了作为顺序模型的图像分支,并将其插入到新模型中。这里的关键是,在 HDF5 格式中,有一个名为 ['model_weights'] 的键,在该字典中,还有另一个名为 ['Image_Branch'] 的键,它对应于我的模型。
我们所做的就是调用:
load_weights(img_loc, by_name=True)
而不是:
img = get_img_branch()
img.load_weights(img_loc, by_name=True)
因为执行后者将尝试查找图像分支键 ['Image_Branch'] 但不会找到它,因为当我们在后一个示例中加载图像分支时,它是图像分支。名为“Image_Branch”的层仅存在于封装它的模型中。
此外,如果您想加载多 GPU 模型并插入权重,您将执行以下操作:
model.layers[-2].load_weights(img_loc, by_name=True)
最佳答案
您可以通过仔细命名图层并使用 documentation 中的现有 model.load_weights(filename, by_name=True)
来实现此目的:
model.load_weights(filepath, by_name=False)
loads the weights of the model from a HDF5 file (created by save_weights). By default, the architecture is expected to be unchanged. To load weights into a different architecture (with some layers in common), useby_name=True
to load only those layers with the same name.
名称所指的是例如 Dense(21, ..., name='dense_layer_1')
或您的 Image_Branch
子模型。因此,请检查图层的原始名称,然后使用匹配的名称重新创建新模型,同时新图层具有不同的新名称。
关于python - 从之前保存的 hdf5 文件中加载部分模型权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54313305/
只是想知道我对组/数据集名称的自由程度如何,或者是否需要使名称简短(因此可读性较差)。这适用于包含许多具有许多重复名称的组和数据集的 HDF5 文件。一些 XML API 做 string inter
简短问题 当 Pandas 在 HDFStore 上工作时(例如: .mean() 或 .apply() ),它是否将内存中的完整数据作为 DataFrame 加载,还是将记录作为 Serie 进行处
我有几个不同的相关数据框(如果需要,可以使用 id 加入它们)。但是,我并不总是同时需要它们。 由于它们非常大,将它们存储在单独的 HDF 存储中是否有意义?或者当我处理同一文件中的其他帧时,携带“未
我似乎无法让它发挥作用。所有示例和线程都让人创建新的数据集。我只想更新已创建的数据集中的一个字段。 这是我所拥有的: h5_file = h5py.File(event_file_path, "r+"
我在 hadoop 上写入小文件时遇到一个奇怪的问题。下面是示例程序 public void writeFile(Configuration conf, String message, String
当我运行 hdf namenode -format 时,它想要删除目录 /home/hadoop/hadooptmpdata/dfs/name/current 但它没有权限执行此操作。如何授予它权限?
有没有办法使用 pandas HDF 存储获取 HDF 表的信息? 例如在 SQL 中有: SELECT COUNT(*) 我想阅读基本表格大小而不必自己加载表格。 最佳答案 试试这个: In [4]
在 pandas 下,每次我使用表格格式而不是固定格式时,我的内存消耗都会爆炸。 import numpy as np np.random.seed(seed=10) df = pd.DataFram
我正在处理大量数据集,每个数据集都是一个 pandas DataFrame,由于它们的大小,我需要从磁盘访问它们。从我读到的内容来看,HDF 似乎是与它们一起工作的好方法,但我对构建数据的最佳方法有点
我正在开发云服务器,我需要使用 blob 存储来存储 HDF 文件 ( http://www.hdfgroup.org/HDF5/ )。 与文件中的创建、读取、写入和修改数据元素相关的函数来自 HDF
我正在尝试将数据存储为 hdf 格式,并希望将默认数据类型设置为表,以便稍后查询。 我正在使用基本代码: import pandas as pd from numpy import random as
我最近在 Lubuntu 上安装了 Anacondas Python。 我正在尝试加载可在 Windows PC 上运行的 HDF 文件: In [14]: import pandas as pd I
我写了下面的脚本,但是我有一个内存消耗的问题,pandas 分配了超过 30 G 的内存,其中数据文件的总和大约是 18 G import pandas as pd import numpy as n
您好,我看到了一些以 HDF5 格式存储的科学数据,我想知道是否有任何 NoSQl 解决方案可以达到与 HDF5 相同的读/写性能。 我的示例的数据使用树结构(/root 然后/root/key 然后
我想知道如何获取 hdf 文件的列名(似乎存储在 hdf header 中);例如,一个文件可能有名为 [a,b,c,d] 的列,而另一个文件有 [a,b,c] 列,而另一个文件有 [b,e,r,z]
我想做什么? pd.read_csv(... nrows=###) 可以读取文件的前 n 行。我想在使用 pd.read_hdf(...) 时做同样的事情。 问题是什么? 我对 documentati
我想将数千张动物图像加载到 pandas df 中,添加特征并可能转换为 HDF。 我使用 cv2.imread() 尝试了以下方法 import cv2 import os import numpy
我想知道 HDF 套件中嵌入的 kafka 和 Confluence 套件中嵌入的 kafka 之间的差异,特别是模式注册工具。 最佳答案 https://registry-project.readt
我想知道 HDF 套件中嵌入的 kafka 和 Confluence 套件中嵌入的 kafka 之间的差异,特别是模式注册工具。 最佳答案 https://registry-project.readt
我使用 pandas 和 hdf5 文件来处理大量数据(例如 10GB 或更多)。我想使用表格格式,以便在读取数据时能够有效地查询数据。但是,当我想将数据写入 hdf 存储时(使用 DataFrame
我是一名优秀的程序员,十分优秀!