欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

先說(shuō)意圖

有兩個(gè)模型:模型A和模型B。模型A的輸出可以連接B的輸入。將兩個(gè)小模型連接成一個(gè)大模型,A-B,既可以同時(shí)訓(xùn)練又可以分離訓(xùn)練。

流行的算法里經(jīng)常有這么關(guān)系的兩個(gè)模型,對(duì)GAN來(lái)說(shuō),生成器和判別器就是這樣子;對(duì)VAE來(lái)說(shuō),編碼器和解碼器就是這樣子;對(duì)目標(biāo)檢測(cè)網(wǎng)絡(luò)來(lái)說(shuō),backbone和整體也是可以拆分的。所以,應(yīng)用范圍還是挺廣的。

實(shí)現(xiàn)方法

首先說(shuō)明,我的實(shí)現(xiàn)方法不一定是最佳方法。也是實(shí)在沒(méi)有借鑒到比較好的方法,所以才自己手動(dòng)寫(xiě)了一個(gè)。

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

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

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

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)讀出各層,然后一層一層重新構(gòu)造新的模型,從而實(shí)現(xiàn)連接效果。因?yàn)閗eras也是基于圖的框架,這個(gè)操作并不會(huì)很費(fèi)時(shí),因?yàn)闆](méi)有實(shí)際地計(jì)算。

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

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

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

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

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

相關(guān)文章

  • python中關(guān)于tqdm的用法

    python中關(guān)于tqdm的用法

    這篇文章主要介紹了python中關(guān)于tqdm的用法及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python基礎(chǔ)詳解之郵件處理

    Python基礎(chǔ)詳解之郵件處理

    這篇文章主要介紹了Python基礎(chǔ)詳解之郵件處理,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python3實(shí)現(xiàn)發(fā)送QQ郵件功能(html)

    Python3實(shí)現(xiàn)發(fā)送QQ郵件功能(html)

    這篇文章主要為大家詳細(xì)介紹了Python3實(shí)現(xiàn)發(fā)送QQ郵件功能,html格式的qq郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 使用Python進(jìn)行防病毒免殺解析

    使用Python進(jìn)行防病毒免殺解析

    這篇文章主要介紹了使用Python進(jìn)行防病毒免殺,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Docker如何部署Python項(xiàng)目的實(shí)現(xiàn)詳解

    Docker如何部署Python項(xiàng)目的實(shí)現(xiàn)詳解

    這篇文章主要介紹了Docker如何部署Python項(xiàng)目的實(shí)現(xiàn)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Linux 發(fā)郵件磁盤(pán)空間監(jiān)控(python)

    Linux 發(fā)郵件磁盤(pán)空間監(jiān)控(python)

    這篇文章主要介紹了Linux發(fā)郵件磁盤(pán)空間監(jiān)控功能,python實(shí)現(xiàn),需要的朋友可以參考下
    2016-04-04
  • python繪制字符畫(huà)視頻的示例代碼

    python繪制字符畫(huà)視頻的示例代碼

    網(wǎng)上有很多的字符畫(huà),看起來(lái)很炫酷,本文就通過(guò)一則示例實(shí)現(xiàn)字符畫(huà)視頻,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • PyTorch?Tensor創(chuàng)建實(shí)現(xiàn)

    PyTorch?Tensor創(chuàng)建實(shí)現(xiàn)

    本文主要介紹了PyTorch?Tensor創(chuàng)建實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • django框架之cookie/session的使用示例(小結(jié))

    django框架之cookie/session的使用示例(小結(jié))

    這篇文章主要介紹了django框架之cookie/session的使用示例(小結(jié)),詳細(xì)的介紹了cookie和session技術(shù)的接口獲取等問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • python分析apache訪問(wèn)日志腳本分享

    python分析apache訪問(wèn)日志腳本分享

    這篇文章主要介紹了python分析apache訪問(wèn)日志腳本分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-02-02

最新評(píng)論