最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Keras實現(xiàn)將兩個模型連接到一起

 更新時間:2020年05月23日 10:04:10   作者:木盞  
這篇文章主要介紹了Keras實現(xiàn)將兩個模型連接到一起,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

神經(jīng)網(wǎng)絡玩得越久就越會嘗試一些網(wǎng)絡結(jié)構上的大改動。

先說意圖

有兩個模型:模型A和模型B。模型A的輸出可以連接B的輸入。將兩個小模型連接成一個大模型,A-B,既可以同時訓練又可以分離訓練。

流行的算法里經(jīng)常有這么關系的兩個模型,對GAN來說,生成器和判別器就是這樣子;對VAE來說,編碼器和解碼器就是這樣子;對目標檢測網(wǎng)絡來說,backbone和整體也是可以拆分的。所以,應用范圍還是挺廣的。

實現(xiàn)方法

首先說明,我的實現(xiàn)方法不一定是最佳方法。也是實在沒有借鑒到比較好的方法,所以才自己手動寫了一個。

第一步,我們有現(xiàn)成的兩個模型A和B;我們想把A的輸出連到B的輸入,組成一個整體C。

第二步, 重構新模型C;我的方法是:讀出A和B各有哪些layer,然后一層一層重新搭成C。

可以看一個自編碼器的代碼(本人所編寫):

class AE:
 def __init__(self, dim, img_dim, batch_size):
  self.dim = dim
  self.img_dim = img_dim
  self.batch_size = batch_size
  self.encoder = self.encoder_construct()
  self.decoder = self.decoder_construct()
 
 def encoder_construct(self):
  x_in = Input(shape=(self.img_dim, self.img_dim, 3))
  x = x_in
  x = Conv2D(self.dim // 16, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(x)
  x = BatchNormalization()(x)
  x = LeakyReLU(0.2)(x)
  x = Conv2D(self.dim // 8, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(x)
  x = BatchNormalization()(x)
  x = LeakyReLU(0.2)(x)
  x = Conv2D(self.dim // 4, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(x)
  x = BatchNormalization()(x)
  x = LeakyReLU(0.2)(x)
  x = Conv2D(self.dim // 2, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(x)
  x = BatchNormalization()(x)
  x = LeakyReLU(0.2)(x)
  x = Conv2D(self.dim, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(x)
  x = BatchNormalization()(x)
  x = LeakyReLU(0.2)(x)
  x = GlobalAveragePooling2D()(x)
  encoder = Model(x_in, x)
  return encoder
 
 def decoder_construct(self):
  map_size = K.int_shape(self.encoder.layers[-2].output)[1:-1]
  # print(type(map_size))
  z_in = Input(shape=K.int_shape(self.encoder.output)[1:])
  z = z_in
  z_dim = self.dim
  z = Dense(np.prod(map_size) * z_dim)(z)
  z = Reshape(map_size + (z_dim,))(z)
  z = Conv2DTranspose(z_dim // 2, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(z)
  z = BatchNormalization()(z)
  z = Activation('relu')(z)
  z = Conv2DTranspose(z_dim // 4, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(z)
  z = BatchNormalization()(z)
  z = Activation('relu')(z)
  z = Conv2DTranspose(z_dim // 8, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(z)
  z = BatchNormalization()(z)
  z = Activation('relu')(z)
  z = Conv2DTranspose(z_dim // 16, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(z)
  z = BatchNormalization()(z)
  z = Activation('relu')(z)
  z = Conv2DTranspose(3, kernel_size=(5, 5), strides=(2, 2), padding='SAME')(z)
  z = Activation('tanh')(z)
  decoder = Model(z_in, z)
  return decoder
 
 def build_ae(self):
  input_x = Input(shape=(self.img_dim, self.img_dim, 3))
  x = input_x
  for i in range(1, len(self.encoder.layers)):
   x = self.encoder.layers[i](x)
  for j in range(1, len(self.decoder.layers)):
   x = self.decoder.layers[j](x)
  y = x
  auto_encoder = Model(input_x, y)
  return auto_encoder

模型A就是這里的encoder,模型B就是這里的decoder。所以,連接的精髓在build_ae()函數(shù),直接用for循環(huán)讀出各層,然后一層一層重新構造新的模型,從而實現(xiàn)連接效果。因為keras也是基于圖的框架,這個操作并不會很費時,因為沒有實際地計算。

補充知識:keras得到每層的系數(shù)

使用keras搭建好一個模型,訓練好,怎么得到每層的系數(shù)呢:

weights = np.array(model.get_weights())
print(weights)
print(weights[0].shape)
print(weights[1].shape)

這樣系數(shù)就被存放到一個np中了。

以上這篇Keras實現(xiàn)將兩個模型連接到一起就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • python中jsonpath的使用小結(jié)

    python中jsonpath的使用小結(jié)

    JsonPath是一種信息抽取類庫,是從JSON文檔中抽取指定信息的工具,提供多種語言實現(xiàn)版本,本文主要介紹了python中jsonpath的使用小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • tkinter動態(tài)顯示時間的兩種實現(xiàn)方法

    tkinter動態(tài)顯示時間的兩種實現(xiàn)方法

    這篇文章主要介紹了tkinter動態(tài)顯示時間的兩種實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python 時間的訪問和轉(zhuǎn)換 time示例小結(jié)

    python 時間的訪問和轉(zhuǎn)換 time示例小結(jié)

    Python 的 time 模塊提供了各種與時間處理相關的功能,包括獲取當前時間、操作日期/時間以及執(zhí)行與時間相關的各種其它功能,這篇文章主要介紹了python 時間的訪問和轉(zhuǎn)換 time,需要的朋友可以參考下
    2024-05-05
  • 淺談python 中類屬性共享的問題

    淺談python 中類屬性共享的問題

    今天小編就為大家分享一篇淺談python 中類屬性共享的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python自動化部署工具Fabric的簡單上手指南

    Python自動化部署工具Fabric的簡單上手指南

    這篇文章主要介紹了Python自動化部署工具Fabric的簡單上手指南,涵蓋Fabric的安裝、fabric的遠程操作與維護等方面,需要的朋友可以參考下
    2016-04-04
  • Python詳細講解淺拷貝與深拷貝的使用

    Python詳細講解淺拷貝與深拷貝的使用

    這篇文章主要介紹了Python中的深拷貝和淺拷貝,通過講解Python中的淺拷貝和深拷貝的概念和背后的原理展開全文,需要的小伙伴可以參考一下
    2022-07-07
  • Django之使用celery和NGINX生成靜態(tài)頁面實現(xiàn)性能優(yōu)化

    Django之使用celery和NGINX生成靜態(tài)頁面實現(xiàn)性能優(yōu)化

    這篇文章主要介紹了Django之使用celery和NGINX生成靜態(tài)頁面實現(xiàn)性能優(yōu)化,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 詳解Python流程控制語句

    詳解Python流程控制語句

    這篇文章主要介紹了Python流程控制語句的的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-10-10
  • matplotlib基礎繪圖命令之imshow的使用

    matplotlib基礎繪圖命令之imshow的使用

    這篇文章主要介紹了matplotlib基礎繪圖命令之imshow的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Python中單引號、雙引號和三引號具體的用法及注意點

    Python中單引號、雙引號和三引號具體的用法及注意點

    這篇文章主要給大家介紹了關于Python中單引號、雙引號和三引號具體的用法及注意點的相關資料,Python中單引號、雙引號、三引號中使用常常困惑,想弄明白這三者相同點和不同點,需要的朋友可以參考下
    2023-07-07

最新評論

凯里市| 赤城县| 凌源市| 桑植县| 什邡市| 万安县| 中阳县| 萨嘎县| 门源| 玉环县| 陇西县| 阿荣旗| 肥东县| 黄平县| 萍乡市| 新安县| 井研县| 绿春县| 西安市| 拜城县| 宽甸| 汉阴县| 会理县| 湖北省| 平江县| 肥西县| 涟源市| 安达市| 尼木县| 长沙市| 浦北县| 富裕县| 田东县| 娄烦县| 黔江区| 庆阳市| 民权县| 康保县| 晋城| 宣武区| 平潭县|