日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

孪生网络(1)_孪生网络的分类

發布時間:2023/12/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 孪生网络(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)_孪生网络的分类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。