深度学习的始祖框架,grandfather级别的框架 —— Theano —— 示例代码学习(3)
实战:写一个卷积层ConvolutionLayer
二维卷积的前向操作:
代码:
import theano.tensor as TT
import theano
import numpy as np
# from theano.tensor.shared_randomstreams import RandomStreams
Identity = lambda x: x
ReLU = lambda x: TT.maximum(x, 0.0)
Sigmoid = lambda x: TT.nnet.sigmoid(x)
Tanh = lambda x: TT.tanh(x)
"""
input: (batchsize, nb_channel, nb_i_row, nb_i_column)
filter: (nb_filters,nb_channel, nb_f_row, nb_f_column)
output: (batchsize, nb_filters, nb_o_row, nb_o_column)
"""
class ConvLayer(object):
def __init__(self, image_shape, filter_shape, activation):
self.activation = eval(activation)
self.image_shape = image_shape
self.filter_shape = filter_shape
rng = np.random.RandomState(seed=42)
w_init = np.asarray(rng.uniform(low=-1, high=1, size=filter_shape), dtype='float32')
b_init = np.zeros(filter_shape[0], dtype='float32')
self.w = theano.shared(value=w_init, borrow=True)
self.b = theano.shared(value=b_init, borrow=True)
def feedforward(self, x):
cout = TT.nnet.conv.conv2d(x, self.w, self.image_shape, self.filter_shape)
# dimshuffle后,shape在'x'位置都被补1
output = self.activation(cout + self.b.dimshuffle('x', 0, 'x', 'x'))
return output
x = TT.tensor4('x', dtype="float32") # 维度为4的tensor, tensor4
con = ConvLayer((32, 3, 224, 224), (64, 3, 5, 5), "ReLU")
out_put = con.feedforward(x)
con_run = theano.function([x, ], out_put, allow_input_downcast=True)
image_input = np.array( np.random.rand(32, 3, 224, 224), dtype="float32" )
# print( con_run(image_input) )
print( con_run(image_input).shape )
运行结果:

参考:
https://zhuanlan.zhihu.com/p/24275551
本博客是博主个人学习时的一些记录,不保证是为原创,个别文章加入了转载的源地址,还有个别文章是汇总网上多份资料所成,在这之中也必有疏漏未加标注处,如有侵权请与博主联系。
如果未特殊标注则为原创,遵循 CC 4.0 BY-SA 版权协议。
posted on 2024-02-12 17:32 Angry_Panda 阅读(29) 评论(0) 收藏 举报
浙公网安备 33010602011771号