pytorch模型轉(zhuǎn)keras模型

在這里插入圖片描述

1. 概述

使用pytorch建立的模型扛门,有時(shí)想把pytorch建立好的模型裝換為keras,本人使用TensorFlow作為keras的backend

2. 依賴

依賴的標(biāo)準(zhǔn)庫:

  • pytorch
  • keras
  • tensorflow
  • pytorch2keras

3. 安裝方式

git clone https://github.com/nerox8664/pytorch2keras.git
python setup.py install

4. 代碼

import numpy as np
import torch
from torch.autograd import Variable
from pytorch2keras import converter

class Pytorch2KerasTestNet(torch.nn.Module):
    def __init__(self):
        super(Pytorch2KerasTestNet, self).__init__()
        self.conv1 = ConvLayer(3, 32, kernel_size=9, stride=1)
        self.in1 = torch.nn.InstanceNorm2d(32, affine=True)
        self.relu = torch.nn.ReLU()

    def forward(self, x):
        y = self.relu(self.in1(self.conv1(x)))
        return y


class ConvLayer(torch.nn.Module):
    def __init__(self, in_channels, out_channels, kernel_size, stride):
        super(ConvLayer, self).__init__()
        reflection_padding = kernel_size // 2
        self.reflection_pad = torch.nn.ReflectionPad2d(reflection_padding)
        self.conv2d = torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride)

    def forward(self, x):
        out = self.reflection_pad(x)
        
        print("conv2d")
        out = self.conv2d(out)
        return out

def check_error(output, k_model, input_np, epsilon=1e-5):
    pytorch_output = output.data.numpy()
    keras_output = k_model.predict(input_np)

    error = np.max(pytorch_output - keras_output)
    print('Error:', error)

    assert error < epsilon
    return error        

model   = Pytorch2KerasTestNet()
input_np = np.random.uniform(0, 1, (1, 3, 224, 224))
input_var = Variable(torch.FloatTensor(input_np))
output = model(input_var)
k_model = converter.pytorch_to_keras(model, input_var, [(3, 224, 224,)], verbose=True)
k_model.summary()

max_error = 0
error = check_error(output, k_model, input_np)
if max_error < error:
    max_error = error
print('Max error: {0}'.format(max_error))

#保存模型
k_model.save('my_model.h5')

# 重新載入模型
from keras.models import load_model
import tensorflow as tf

model = load_model('my_model.h5',custom_objects={"tf": tf})
model.summary()

輸出結(jié)果:

Layer (type)                 Output Shape              Param #   
=================================================================
input_0 (InputLayer)         (None, 3, 224, 224)       0         
_________________________________________________________________
5 (Lambda)                   (None, 3, 232, 232)       0         
_________________________________________________________________
6 (Conv2D)                   (None, 32, 224, 224)      7808      
_________________________________________________________________
7 (Lambda)                   (None, 32, 224, 224)      0         
_________________________________________________________________
output_0 (Activation)        (None, 32, 224, 224)      0         
=================================================================
Total params: 7,808
Trainable params: 7,808
Non-trainable params: 0

5. 最后

image
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末歹河,一起剝皮案震驚了整個(gè)濱河市掩浙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秸歧,老刑警劉巖厨姚,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異寥茫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)矾麻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門纱耻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人险耀,你說我怎么就攤上這事弄喘。” “怎么了甩牺?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵蘑志,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我贬派,道長(zhǎng)急但,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任搞乏,我火速辦了婚禮波桩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘请敦。我一直安慰自己镐躲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布侍筛。 她就那樣靜靜地躺著萤皂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匣椰。 梳的紋絲不亂的頭發(fā)上裆熙,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音禽笑,去河邊找鬼弛车。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蒲每,可吹牛的內(nèi)容都是我干的纷跛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼邀杏,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贫奠!你這毒婦竟也來了唬血?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤唤崭,失蹤者是張志新(化名)和其女友劉穎拷恨,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谢肾,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腕侄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了芦疏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冕杠。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖酸茴,靈堂內(nèi)的尸體忽然破棺而出分预,到底是詐尸還是另有隱情,我是刑警寧澤薪捍,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布笼痹,位于F島的核電站,受9級(jí)特大地震影響酪穿,放射性物質(zhì)發(fā)生泄漏凳干。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一被济、第九天 我趴在偏房一處隱蔽的房頂上張望纺座。 院中可真熱鬧,春花似錦溉潭、人聲如沸净响。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馋贤。三九已至,卻和暖如春畏陕,著一層夾襖步出監(jiān)牢的瞬間配乓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工惠毁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留犹芹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓鞠绰,卻偏偏與公主長(zhǎng)得像腰埂,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蜈膨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容