keras Model 3 共享的层
考虑这样的一个问题:我们要判断连个tweet是否来源于同一个人。
首先我们对两个tweet进行处理,然后将处理的结构拼接在一起,之后跟一个逻辑回归,输出这两条tweet来自同一个人概率。
因为我们对两条tweet的处理是相同的,所以对第一条tweet的处理的模型,可以被重用来处理第二个tweet。我们考虑用LSTM进行处理。
假设我们的输入是两条 280*256的向量
首先定义输入:
import keras
from keras.layers import Input, LSTM, Dense
from keras.models import Model tweet_a = Input(shape=(280, 256))
tweet_b = Input(shape=(280, 256))
然后我们共享LSTM。共享层很简单,只要实例化层一次,然后在你想处理的tensor上调用你想要应用的次数即可(翻译无力,看代码)
# This layer can take as input a matrix
# and will return a vector of size 64
shared_lstm = LSTM(64) # When we reuse the same layer instance
# multiple times, the weights of the layer
# are also being reused
# (it is effectively *the same* layer)
encoded_a = shared_lstm(tweet_a)
encoded_b = shared_lstm(tweet_b) # We can then concatenate the two vectors:
merged_vector = keras.layers.concatenate([encoded_a, encoded_b], axis=-1) # And add a logistic regression on top
predictions = Dense(1, activation='sigmoid')(merged_vector) # We define a trainable model linking the
# tweet inputs to the predictions
model = Model(inputs=[tweet_a, tweet_b], outputs=predictions) model.compile(optimizer='rmsprop',
loss='binary_crossentropy',
metrics=['accuracy'])
model.fit([data_a, data_b], labels, epochs=10)
其实,简单点说,对一个层的多次调用,就是在共享这个层。这里有一个层的节点的概念
当你在一个输入tensor上调用一个层时,就会生成一个输出tensor,就会在这个层上添加一个节点,这个节点连接着这两个tensor(输入tensor和输出tensor)。当你多次调用同一个层的时,
这个层生成的节点就会按照0 ,1, 2, 。。以此类推编号。
那么当一个层有多个节点的时候,我们怎么获取它的输出呢?
如果直接通过output获取会出错:
a = Input(shape=(280, 256))
b = Input(shape=(280, 256)) lstm = LSTM(32)
encoded_a = lstm(a)
encoded_b = lstm(b) lstm.output
>> AttributeError: Layer lstm_1 has multiple inbound nodes,
hence the notion of "layer output" is ill-defined.
Use `get_output_at(node_index)` instead.
这时候应该通过索引进行调用:
assert lstm.get_output_at(0) == encoded_a
assert lstm.get_output_at(1) == encoded_b
对于输入,也是同样的
a = Input(shape=(32, 32, 3))
b = Input(shape=(64, 64, 3)) conv = Conv2D(16, (3, 3), padding='same')
conved_a = conv(a) # Only one input so far, the following will work:
assert conv.input_shape == (None, 32, 32, 3) conved_b = conv(b)
# now the `.input_shape` property wouldn't work, but this does:
assert conv.get_input_shape_at(0) == (None, 32, 32, 3)
assert conv.get_input_shape_at(1) == (None, 64, 64, 3)
keras Model 3 共享的层的更多相关文章
- Problem after converting keras model into Tensorflow pb - 将keras模型转换为Tensorflow pb后的问题
I'm using keras 2.1.* with tensorflow 1.13.* backend. I save my model during training with .h5 forma ...
- Deploying Keras model on Tensorflow Serving--
keras训练了个二分类的模型.需求是把keras模型跑到 tensorflow serving上 (TensorFlow Serving 系统用于在生产环境中运行模型) keras模型转 tenso ...
- tensorflow 2.0 技巧 | 自定义tf.keras.Model的坑
自定义tf.keras.Model需要注意的点 model.save() subclass Model 是不能直接save的,save成.h5,但是能够save_weights,或者save_form ...
- keras Model 2 多输入和输出
1 入门 2 多个输入和输出 3 共享层 函数式模型有一个很好用的应用实例是:编写拥有多个输入和输出的模型.函数式模型使得在复杂网络中操作巨大的数据流变的简单. 我们实现下面这样的模型 from ke ...
- keras Model 1 入门篇
1 入门 2 多个输入和输出 3 共享层 最近在学习keras,它有一些实现好的特征提取的模型:resNet.vgg.而且是带权重的.用来做特诊提取比较方便 首先要知道keras有两种定义模型的方式: ...
- Keras Model Sequential模型接口
Sequential 模型 API 在阅读这片文档前,请先阅读 Keras Sequential 模型指引. Sequential 模型方法 compile compile(optimizer, lo ...
- keras model.compile(loss='目标函数 ', optimizer='adam', metrics=['accuracy'])
深度学习笔记 目标函数的总结与整理 目标函数,或称损失函数,是网络中的性能函数,也是编译一个模型必须的两个参数之一.由于损失函数种类众多,下面以keras官网手册的为例. 在官方keras.io里 ...
- bootstrapt model 的多罩层,禁用罩层
选项 有一些选项可以用来定制模态窗口(Modal Window)的外观和感观,它们是通过 data 属性或 JavaScript 来传递的.下表列出了这些选项: 选项名称 类型/默认值 Data 属性 ...
- tensorflow2.0编程规范
背景 tensorflow2.0 相比于1.0 有很大变化,1.0版本的placeholder,Session都没有了,2.0版本强推使用keras.keras是一个比较高层的api,确实挺好用的,一 ...
随机推荐
- STM32复位及通过函数判断是何种条件出发的复位
STM32F10xxx支持三种复位形式,分别为系统复位.上电复位和备份区域复位. 一.系统复位: 系统复位将复位所有寄存器至它们的复位状态. 当发生以下任一事件时,产生一个系统复位: 1. NRST引 ...
- Jenkins安装Slave节点
在系统管理----节点管理下 创建完成后会出现slave节点启动的命令,下载agent.jar,然后启动服务 Master-slave相当于Server和Agent,master管理job和slave ...
- springboot ElasticSearch 简单的全文检索高亮
原文:https://segmentfault.com/a/1190000017324038?utm_source=tag-newest 首先引入依赖 <dependency> <g ...
- Find The Multiple (DFS递归)
题意:输入一个不超过200的数 n,然后求得一个数字k,数字满足:能被n整除,每一位只有0,1.这样的数字k会有很多个,然以输出一个就可以. 注意unsigned __int64的范围,-(10^19 ...
- P1736 创意吃鱼法[二维dp]
题目背景 感谢@throusea 贡献的两组数据 题目描述 回到家中的猫猫把三桶鱼全部转移到了她那长方形大池子中,然后开始思考:到底要以何种方法吃鱼呢(猫猫就是这么可爱,吃鱼也要想好吃法 ^_*).她 ...
- npm link的使用
npm link的使用 https://www.jianshu.com/p/aaa7db89a5b2
- python多线程实现ping多个ip
#!/usr/bin/env python # -*- coding:utf-8 -*- import subprocess import logging import datetime import ...
- 微信小程序导入Vant报错
作者:如也_d1c0链接:https://www.jianshu.com/p/0d2332984f8c来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处. 先放出来Vant ...
- collection,random,os,sys,序列化模块
一.collection 模块 python拥有一些内置的数据类型,比如 str,list.tuple.dict.set等 collection模块在这些内置的数据类型的基础上,提供了额外的数据类型: ...
- c++ 构造函数执行顺序
开辟内存空间. 按照成员变量声明的顺序开始构造成员变量. 如果成员变量在初始化列表中, 就会执行该变量类型的拷贝构造函数. 如果成员变量没有在初始化列表中, 就会执行该变量类型的缺省构造函数. 进入函 ...