当前位置: 首页 > 面试题库 >

Keras替换输入层

陈博容
2023-03-14
问题内容

我拥有的代码(我无法更改)将Resnet与my_input_tensorinput_tensor一起使用。

model1 = keras.applications.resnet50.ResNet50(input_tensor=my_input_tensor, weights='imagenet')

研究源代码,ResNet50函数使用创建一个新的keras输入层,my_input_tensor然后创建模型的其余部分。这是我要用自己的模型复制的行为。我从h5文件加载我的模型。

model2 = keras.models.load_model('my_model.h5')

由于此模型已经具有输入层,因此我想用定义的新输入层替换它my_input_tensor

如何替换输入层?


问题答案:

使用以下方法保存模型时:

old_model.save('my_model.h5')

它将保存以下内容:

  1. 模型的体系结构,允许创建模型。
  2. 模型的权重。
  3. 模型的训练配置(损失,优化器)。
  4. 优化器的状态,允许训练从您之前离开的位置继续进行。

因此,当您加载模型时:

res50_model = load_model('my_model.h5')

您应该返回相同的模型,可以使用以下命令验证相同的模型:

res50_model.summary()
res50_model.get_weights()

现在,您可以弹出输入层,并使用以下命令添加自己的输入层:

res50_model.layers.pop(0)
res50_model.summary()

添加新的输入层:

newInput = Input(batch_shape=(0,299,299,3))    # let us say this new InputLayer
newOutputs = res50_model(newInput)
newModel = Model(newInput, newOutputs)

newModel.summary()
res50_model.summary()


 类似资料:
  • 在模型中添加LSTM层之前,我不确定是否需要添加密集输入层。例如,使用以下模型: LSTM层是否为输入层,密集层是否为输出层(即无隐藏层)?或者Keras是否创建了一个输入层,这意味着LSTM层将是一个隐藏层?

  • 模板输出替换 支持对模板文件输出的内容进行字符替换,定义后在渲染模板或者内容输出的时候就会自动根据设置的替换规则自动替换。 5.1系统没有任何内置的替换规则。 如果需要全局替换的话,可以直接在template.php配置文件中添加: 'tpl_replace_string' => [ '__STATIC__'=>'/static', '__JS__' => '/static/j

  • 问题内容: 在Keras中创建顺序模型时,我知道您在第一层中提供了输入形状。然后,此输入形状会构成 隐式 输入层吗? 例如,下面的模型明确指定了2个密集层,但这实际上是一个3层模型,即由输入形状隐含的一个输入层,一个具有32个神经元的隐藏密集层,然后一个具有10个可能输出的输出层组成的模型吗? 问题答案: 好吧,实际上它实际上 是 一个隐式输入层,即您的模型是一个具有三层“输入,隐藏和输出”的“老

  • 问题内容: 我试图使用keras训练LSTM模型,但我认为这里出了点问题。 我有一个错误 ValueError:检查输入时出错:预期lstm_17_input具有3个维,但数组的形状为(10000,0,20) 虽然我的代码看起来像 其中已的形状和前几个数据点像 并且具有这样的形状的,它是二进制(0/1)标签阵列。 有人可以指出我在哪里错了吗? 问题答案: 为了完整起见,这是发生了什么。 首先,像K

  • 我正在尝试创建一维卷积模型,但我似乎无法获得正确的输入形状。以下是我所拥有的: 我收到以下错误: 有人有什么建议吗?

  • 我正在使用Keras构建一个CNN,以下Conv1D是我的第一层: 我正在培训以下功能: 其中,train\u df是一个由两列组成的pandas数据帧,其中,对于每一行,标签是一个int(0或1),有效载荷是一个用零填充/截断为1000的浮点数组。train\U df中的培训示例总数为15641。 模型编译,但在训练期间,我得到这个错误: 我看了这篇文章,试图将输入更改为1000个浮点长列表的数