首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从预先训练好的TensorFlow模型中去除层?

如何从预先训练好的TensorFlow模型中去除层?
EN

Stack Overflow用户
提问于 2020-04-29 01:13:16
回答 1查看 401关注 0票数 0

我在TensorFlow中用三个隐藏层训练了以下模型:

代码语言:javascript
运行
复制
inputs = tf.keras.Input(shape=(timesteps, feature_size))

l = LSTM(units=state_size,
               return_sequences=True)(inputs)
l = LSTM(units=state_size,
               return_sequences=True)(l)
l = LSTM(units=state_size,
               return_sequences=True)(l)

output = TimeDistributed(Dense(output_size, activation='softmax'))(l)

model = tf.keras.Model(inputs=inputs, outputs=output)

现在,我想使用模型,但跳过第二个隐藏层,即直接将输出从第一层传递到第三层,而不通过第二层。我知道我可以通过以下方式获得第一层的输出:

代码语言:javascript
运行
复制
output = model.layers[idx].Output

但是现在我如何将这个输出提供给第三层呢?非常感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-29 02:14:39

一种方法是使用图层名称来创建新模型。

下面的示例使用了指定的名称。您也可以使用Keras提供的默认名称。

代码语言:javascript
运行
复制
inputs = tf.keras.Input(shape=(timesteps, feature_size))

l = LSTM(units=state_size, return_sequences=True, name="lstm1")(inputs)
l = LSTM(units=state_size, return_sequences=True, name="lstm2")(l)
l = LSTM(units=state_size, return_sequences=True, name="lstm3")(l)

output = TimeDistributed(Dense(output_size, activation='softmax'))(l)

model = tf.keras.Model(inputs=inputs, outputs=output)

# Now create the second model using specific layers from the first model
reuse_layers = ["lstm1", "lstm3"]

inputs = tf.keras.Input(shape=(timesteps, feature_size))
l = inputs
for layer_name in reuse_layers:
    l = model.get_layer(layer_name)(l)

output = TimeDistributed(Dense(output_size, activation='softmax'))(l)
new_model = Model(inputs=inputs, outputs=output)    
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61485980

复制
相关文章

相似问题

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