Keras切换backend : theano --> tensorflow

[size=x-large][color=blue]1、切换backend[/color][/size]
修改~/.keras/keras.json 文件中的 theano 字段为tensorflow即可
官方文档:[url]https://keras.io/backend/[/url]


[size=x-large][color=blue]2、theano和tensorflow卷积核互相转换[/color][/size]
切换backend后,模型运算会出错,原因在于tensorflow中的卷积实际上时相关,二theano中的卷积是真正的卷积!!!!所以,切换backend时,需要对卷积核进行翻转

参见:[url]https://github.com/fchollet/keras/wiki/Converting-convolution-kernels-from-Theano-to-TensorFlow-and-vice-versa[/url]

[b]通用转换代码[/b]如下(theano和tensorflow互转):
from keras import backend as K
from keras.utils.np_utils import convert_kernel

model = model_from_json(open(os.path.join('.', 'model.json')).read())
model.load_weights(os.path.join('.', 'model_weights.h5'))


for layer in model.layers:
if layer.__class__.__name__ in ['Convolution1D', 'Convolution2D','Convolution3D', 'AtrousConvolution2D']:
original_w = K.get_value(layer.W)
converted_w = convert_kernel(original_w)
K.set_value(layer.W, converted_w)


print('running')
K.get_session().run(ops)
print('saving')
model.save_weights('model_weights_anotherBackend.h5')


[b]tensoflow专用转换代码[/b]如下:
from keras import backend as K
from keras.utils.np_utils import convert_kernel
import tensorflow as tf

model = model_from_json(open(os.path.join('.', 'model.json')).read())
model.load_weights(os.path.join('.', 'model_weights.h5'))
ops = []
for layer in model.layers:
if layer.__class__.__name__ in ['Convolution1D', 'Convolution2D', 'Convolution3D', 'AtrousConvolution2D']:
original_w = K.get_value(layer.W)
print(layer.W.name)
print('\t',end='')
print(layer.W.get_shape().to_list())
converted_w = convert_kernel(original_w)
ops.append(tf.assign(layer.W, converted_w).op)

print('running')
K.get_session().run(ops)
print('saving')
model.save_weights('model_weights_tensorflow.h5')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值