孪生网络(1)_孪生网络的分类
孪生网络
全文参考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)_孪生网络的分类相关推荐
- 家庭网络搭建_家庭网络
家庭网络搭建 I spent some time overhauling my home network. There was no way I was going to settle for the ...
- vpc经典网络区别_经典网络与VPC
1.VPC是什么? VPC(Virtual Private Cloud)是公有云上自定义的逻辑隔离网络空间,与用户在数据中心运行的传统网络相似,托管在VPC内的是用户在私有云上的服务资源,如云主机.负 ...
- allgro显示网络名称_起名||网络公司名字推荐
21世纪是经济和技术快速发展的时代,许多网络公司和企业正在不断涌入.对于新成立的公司,一个好的名字可以给企业带来无法估量的经济利益.那么,网络技术公司该如何起名呢? 一.网络技术公司的命名技巧: 1. ...
- 99 网络编程_传统网络工程师如何利用python实现公司内网IP地址信息查询?
网 工 圈 网络工程师阿龙圈内最早的公益公众号,本号已认证!学网络关注我一个就够了(关注近5w+)关注听说99%的网工都来这里充电吖关注我,一个老HCIE(编号3558)带你轻松玩网络技术 ...
- 是什么意思网络用语_日本网络用语是什么意思?
今天又要来带大家学习网络流行日语啦!今天要学的这个词叫「ハピバ」. 大家知道这个词是什么意思吗? 其实「ハピバ」的意思等同于「お誕生日おめでとう(生日快乐)」,「ハピバ」来源于「ハッピーバースデー(H ...
- windows_网络重置_重置网络_命令
背景:有时windows会莫名没有网,此时重置下网络,大多就好了 操作:用管理员身份,打开cmd窗口,一般输入下面1.2条目,然后重启系统,就好了 1.重置IP 设置,恢复到默认自动获取IP 和DNS ...
- rstp 小米网络摄像头_常见网络摄像机的端口及RTSP地址
海康威视 默认IP地址:192.168.1.64/DHCP 用户名admin 密码自己设 端口:"HTTP 端口"(默认为 80)."RTSP 端口"(默认为 ...
- python生成网络拓扑图_画网络拓扑图 - neteworkx-python- - ItBoth
[NETWORK ASSOCIATES GUIDE TO COMMUNICATIONS PROTOCOLS 网络协议关系拓扑图 很全面 很好 值得收藏!] 在python下安装networkx绘制复杂 ...
- dos命令行设置网络优先级_笔记本网络连接图标不见了怎么办?
首先检查网卡是否正常工作,你只要,反过来,单击开始-设置-命令,控制面板上的控制面板窗口中,双击系统图标,系统弹出窗口属性设置,打开"硬件"选项卡,再点击"设备管理器&q ...
- dos命令行设置网络优先级_笔记本网络连接图标不见了?一招搞定!
点击蓝字 关注我们 首先检查网卡是否正常工作,你只要,反过来,单击开始-设置-命令,控制面板上的控制面板窗口中,双击系统图标,系统弹出窗口属性设置,打开"硬件"选项卡,再点击&qu ...
最新文章
- ng命令汇总:Angular CLI 使用教程指南参考
- 课时 12:可观测性-监控与日志(莫源)
- Visual studio(VS)如何修改显示字体类型和字体大小?
- 华为鸿蒙内置,内置鸿蒙系统,华为生态产品海雀智能摄像头Pro体验
- Syncd - 开源自动化部署工具
- eq linux_《Linux设备驱动程序》(十二)——时间操作(一)
- h5 video 手机上无法显示_手机镜象投屏到电视上全屏显示
- Scala函数使用可变参数
- 【进程管理】进程资源图理解与化简
- case when 语句用法
- 窥视Google Chrome OS
- 编程序,输入长方形的两边长a和b,输出长方形的周长和面积
- (原)python中matplotlib的颜色及线条控制
- CD-ROM是指啥?
- 无源互调分析仪PIM Analyzer原理及应用
- 小米打印机显示服务器错误是怎么回事,小米打印机出现不再接受此打印加密是什么意思?...
- 计算机图形学 英语,计算机图形学专业术语中英文对照
- ppt形状html,PPT如何才能高大上?“形状”在PPT有这些妙用
- 关于TDOA算法的仿真及比较
- Problem F: 一天中的第几秒
热门文章
- Maya中AO贴图的一些烘焙心得
- 【渝粤教育】电大中专计算机常用工具软件_1作业 题库
- 欧姆龙plc解密实例_OMRON PLC的加密和解密方法
- Android中微信抢红包插件原理解析和开发实现
- Linux上tomcat运行内存溢出,linux中tomcat内存溢出解决办法
- 乌班图系统安装mysql
- 红米 刷机 android7.1,有没有红米note3全网通的android7.1刷机包
- 一种通感一体化的信号设计与性能分析
- 【深度学习之美笔记】人工“碳”索意犹尽,智能“硅”来未可知(入门系列之二)
- IDEA eclipse快捷键大全