首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >keras组合预训练模型

keras组合预训练模型
EN

Stack Overflow用户
提问于 2018-01-17 19:09:24
回答 2查看 4.3K关注 0票数 6

我训练了一个模型,并希望使用函数api将它与另一个keras模型结合(后端是tensorflow版本1.4)

我的第一个模特是这样的:

代码语言:javascript
复制
import tensorflow.contrib.keras.api.keras as keras

model = keras.models.Sequential()
input = Input(shape=(200,))
dnn = Dense(400, activation="relu")(input)
dnn = Dense(400, activation="relu")(dnn)
output = Dense(5, activation="softmax")(dnn)
model = keras.models.Model(inputs=input, outputs=output)

在我训练这个模型之后,我使用keras model.save()方法保存它。我也可以加载模型,并对其进行再培训,没有问题。

现在,我想使用这个模型的输出作为第二个模型的附加输入:

代码语言:javascript
复制
# load first model
old_model = keras.models.load_model(path_to_old_model)

input_1 = Input(shape=(200,))
input_2 = Input(shape=(200,))
output_old_model = old_model(input_2)

merge_layer = concatenate([input_1, output_old_model])
dnn_layer = Dense(200, activation="relu")(merge_layer)
dnn_layer = Dense(200, activation="relu")(dnn_layer)
output = Dense(10, activation="sigmoid")(dnn_layer)
new_model = keras.models.Model(inputs=[input_1, input_2], outputs=output)
new_model.compile(loss="binary_crossentropy", optimizer="adam", metrics=["accuracy"]
new_model.fit(inputs=[x1,x2], labels=labels, epochs=50, batch_size=32)

当我尝试这样做时,我会得到以下错误消息:

代码语言:javascript
复制
FailedPreconditionError (see above for traceback): Attempting to use uninitialized value dense_1/kernel
 [[Node: dense_1/kernel/read = Identity[T=DT_FLOAT, _class=["loc:@dense_1/kernel"], _device="/job:localhost/replica:0/task:0/device:GPU:0"](dense_1/kernel)]]
 [[Node: model_1_1/dense_3/BiasAdd/_79 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device="/job:localhost/replica:0/task:0/device:GPU:0", send_device_incarnation=1, tensor_name="edge_68_model_1_1/dense_3/BiasAdd", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]()]]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-17 21:48:33

我将按照以下步骤这样做:

  1. 定义使用相同体系结构构建干净模型的功能: def build_base():shape==shape=(200,) dnn =密集(400,activation=“relu”)(输入) dnn =密集(400,activation="relu")(dnn)输出=稠密(5,activation="softmax")(dnn)模型= keras.models.Model(inputs=input,outputs=output)返回输入、输出、模型
  2. 构建两个相同模型的副本: input_1,output_1,model_1 = build_base() input_2,output_2,model_2 = build_base()
  3. 在这两种模型中设定权重: model_1.set_weights(old_model.get_weights()) model_2.set_weights(old_model.get_weights())
  4. 现在做剩下的: merge_layer =级联(input_1,output_2) dnn_layer =稠密(200,activation="relu")(merge_layer) dnn_layer =稠密(200,activation="relu")(dnn_layer)输出=稠密(10,activation=“乙状结肠”)(Dnn_layer) new_model = keras.models.Model(inputs=input_1,input_2,outputs=output)
票数 4
EN

Stack Overflow用户

发布于 2020-06-02 17:13:17

假设您有一个名为pretrained_model的预先培训/保存的CNN模型,您希望在其中添加一个紧密连接的层,然后使用函数式API,您可以编写如下内容:

代码语言:javascript
复制
from keras import models, layers

kmodel = layers.Flatten()(pretrained_model.output)
kmodel = layers.Dense(256, activation='relu')(kmodel)
kmodel_out = layers.Dense(1, activation='sigmoid')(kmodel)
model = models.Model(pretrained_model.input, kmodel_out)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48308306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档