孪生网络

全文参考https://blog.csdn.net/qq_35826213/article/details/86313469

​ 孪生网络有两种,一种是不共享参数的孪生网络,另一种是共享参数的孪生网络,

不共享参数的孪生网络

from keras.layers import merge,Conv2D,MaxPool2D,Activation,Dense,concatenate,Flatten
from keras.layers import Input
from keras.models import Modeldef FeatureNetwork():"""特征提取网络"""inp=Input(shape=(28,28,1),name="FeatureNet_ImageInput")models=Conv2D(filters=24,kernel_size=(3,3),strides=1,padding='same')(inp)models=Activation('relu')(models)models=MaxPool2D(pool_size=(3,3))(models)models=Conv2D(filters=64,kernel_size=(3,3),strides=1,padding='same')(models)models=Activation('relu')(models)models=Conv2D(filters=96,kernel_size=(3,3),strides=1,padding='valid')(models)models=Activation('relu')(models)models = Conv2D(filters=96, kernel_size=(3, 3), strides=1, padding='valid')(models)models = Activation('relu')(models)models =Flatten()(models)models =Dense(512)(models)models=Activation('relu')(models)model=Model(inputs=inp,outputs=models)return model
#此网络为不共享参数的孪生网络,实际是两个网络模型
def ClassiFilterNet():#孪生网络中一个特征提取input1=FeatureNetwork()#孪生网络中另一个特征提取input2=FeatureNetwork()for layer in input2.layers:layer.name=layer.name+str("_2")inp1=input1.inputinp2=input2.input#融合网络,其实就是简单地相加merget_layers=concatenate([input1.output,input2.output])fc1=Dense(1024,activation='relu')(merget_layers)fc2=Dense(1024,activation='relu')(fc1)fc3=Dense(2,activation='softmax')(fc2)class_models=Model(inputs=[inp1,inp2],outputs=[fc3])return class_models
net=ClassiFilterNet()
net.summary()

上面的代码是不共享参数的神经网络模型,每个输入都会训练自己的网络模型,训练之后会把两个神经网络再组合,生成一个神经网络,网络图如下

不共享网络参数的参数

dense_3 (Dense) (None, 1024) 1049600 concatenate_1[0][0]


dense_4 (Dense) (None, 1024) 1049600 dense_3[0][0]


dense_5 (Dense) (None, 2) 2050 dense_4[0][0]

Total params: 4,864,994
Trainable params: 4,864,994

去掉最后全连接层的网络后,参数大小为2763744

2.共享参数的神经网络

代码如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from keras.models import Sequential
from keras.layers import merge,Conv2D,MaxPool2D,Activation,Dense,concatenate,Flatten
from keras.layers import Input
from keras.models import Model
from keras.utils import np_utils
import tensorflow as tf
import keras
from keras.datasets import mnist
import numpy as np
from keras.utils import np_utils#此网络为不共享参数的孪生网络,实际是两个网络模型
def ClassiFilterNet(reuse=False):inp = Input(shape=(28, 28, 1), name="FeatureNet_ImageInput")models = Conv2D(filters=24, kernel_size=(3, 3), strides=1, padding='same')(inp)models = Activation('relu')(models)models = MaxPool2D(pool_size=(3, 3))(models)models = Conv2D(filters=64, kernel_size=(3, 3), strides=1, padding='same')(models)models = Activation('relu')(models)models = Conv2D(filters=96, kernel_size=(3, 3), strides=1, padding='valid')(models)models = Activation('relu')(models)models = Conv2D(filters=96, kernel_size=(3, 3), strides=1, padding='valid')(models)models = Activation('relu')(models)models = Flatten()(models)models = Dense(512)(models)models = Activation('relu')(models)model = Model(inputs=inp, outputs=models)inp1=Input(shape=(28,28,1))inp2=Input(shape=(28,28,1))model1=model(inp1)model2=model(inp2)merge=concatenate([model1,model2])fc1=Dense(1024,activation='relu')(merge)fc2=Dense(1024,activation='relu')(fc1)fc3=Dense(2,activation='softmax')(fc2)class_models=Model(inputs=[inp1,inp2],outputs=[fc3])return class_models
net=ClassiFilterNet()
net.summary()

可以看到共享权重的神经网络是两个输入共享一套网络模型,使用同一套网络,最后合并输出,然后结合全连接层,

可以看到这个网络是共享了权重的,参数数量一下就减少了

参数数量如下


dense_2 (Dense) (None, 1024) 1049600 concatenate_1[0][0]


dense_3 (Dense) (None, 1024) 1049600 dense_2[0][0]


dense_4 (Dense) (None, 2) 2050 dense_3[0][0]

Total params: 3,483,122
Trainable params: 3,483,122

去除全连接层后的网络参数为

​ 1381872,可以看到是2763744的二分之一

孪生网络(1)_孪生网络的分类相关推荐

  1. 家庭网络搭建_家庭网络

    家庭网络搭建 I spent some time overhauling my home network. There was no way I was going to settle for the ...

  2. vpc经典网络区别_经典网络与VPC

    1.VPC是什么? VPC(Virtual Private Cloud)是公有云上自定义的逻辑隔离网络空间,与用户在数据中心运行的传统网络相似,托管在VPC内的是用户在私有云上的服务资源,如云主机.负 ...

  3. allgro显示网络名称_起名||网络公司名字推荐

    21世纪是经济和技术快速发展的时代,许多网络公司和企业正在不断涌入.对于新成立的公司,一个好的名字可以给企业带来无法估量的经济利益.那么,网络技术公司该如何起名呢? 一.网络技术公司的命名技巧: 1. ...

  4. 99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?

      网   工   圈 网络工程师阿龙圈内最早的公益公众号,本号已认证!学网络关注我一个就够了(关注近5w+)关注听说99%的网工都来这里充电吖关注我,一个老HCIE(编号3558)带你轻松玩网络技术 ...

  5. 是什么意思网络用语_日本网络用语是什么意思?

    今天又要来带大家学习网络流行日语啦!今天要学的这个词叫「ハピバ」. 大家知道这个词是什么意思吗? 其实「ハピバ」的意思等同于「お誕生日おめでとう(生日快乐)」,「ハピバ」来源于「ハッピーバースデー(H ...

  6. windows_网络重置_重置网络_命令

    背景:有时windows会莫名没有网,此时重置下网络,大多就好了 操作:用管理员身份,打开cmd窗口,一般输入下面1.2条目,然后重启系统,就好了 1.重置IP 设置,恢复到默认自动获取IP 和DNS ...

  7. rstp 小米网络摄像头_常见网络摄像机的端口及RTSP地址

    海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...

  8. python生成网络拓扑图_画网络拓扑图 - neteworkx-python- - ItBoth

    [NETWORK ASSOCIATES GUIDE TO COMMUNICATIONS PROTOCOLS 网络协议关系拓扑图 很全面 很好 值得收藏!] 在python下安装networkx绘制复杂 ...

  9. dos命令行设置网络优先级_笔记本网络连接图标不见了怎么办?

    首先检查网卡是否正常工作,你只要,反过来,单击开始-设置-命令,控制面板上的控制面板窗口中,双击系统图标,系统弹出窗口属性设置,打开"硬件"选项卡,再点击"设备管理器&q ...

  10. dos命令行设置网络优先级_笔记本网络连接图标不见了?一招搞定!

    点击蓝字 关注我们 首先检查网卡是否正常工作,你只要,反过来,单击开始-设置-命令,控制面板上的控制面板窗口中,双击系统图标,系统弹出窗口属性设置,打开"硬件"选项卡,再点击&qu ...

最新文章

  1. ng命令汇总:Angular CLI 使用教程指南参考
  2. 课时 12:可观测性-监控与日志(莫源)
  3. Visual studio(VS)如何修改显示字体类型和字体大小?
  4. 华为鸿蒙内置,内置鸿蒙系统,华为生态产品海雀智能摄像头Pro体验
  5. Syncd - 开源自动化部署工具
  6. eq linux_《Linux设备驱动程序》(十二)——时间操作(一)
  7. h5 video 手机上无法显示_手机镜象投屏到电视上全屏显示
  8. Scala函数使用可变参数
  9. 【进程管理】进程资源图理解与化简
  10. case when 语句用法
  11. 窥视Google Chrome OS
  12. 编程序,输入长方形的两边长a和b,输出长方形的周长和面积
  13. (原)python中matplotlib的颜色及线条控制
  14. CD-ROM是指啥?
  15. 无源互调分析仪PIM Analyzer原理及应用
  16. 小米打印机显示服务器错误是怎么回事,小米打印机出现不再接受此打印加密是什么意思?...
  17. 计算机图形学 英语,计算机图形学专业术语中英文对照
  18. ppt形状html,PPT如何才能高大上?“形状”在PPT有这些妙用
  19. 关于TDOA算法的仿真及比较
  20. Problem F: 一天中的第几秒

热门文章

  1. Maya中AO贴图的一些烘焙心得
  2. 【渝粤教育】电大中专计算机常用工具软件_1作业 题库
  3. 欧姆龙plc解密实例_OMRON PLC的加密和解密方法
  4. Android中微信抢红包插件原理解析和开发实现
  5. Linux上tomcat运行内存溢出,linux中tomcat内存溢出解决办法
  6. 乌班图系统安装mysql
  7. 红米 刷机 android7.1,有没有红米note3全网通的android7.1刷机包
  8. 一种通感一体化的信号设计与性能分析
  9. 【深度学习之美笔记】人工“碳”索意犹尽,智能“硅”来未可知(入门系列之二)
  10. IDEA eclipse快捷键大全