“class ResConv1DLayer(object):
def __init__(self, rng, input, n_in=0, n_out=0, halfWinSize=0,
dilation=1, activation=T.nnet.relu, mask=None):
self.input = input
self.n_in = n_in
self.n_out = n_out
self.halfWinSize = halfWinSize
windowSize = 2*halfWinSize + 1
self.filter_size = windowSize
self.dilation = (1, dilation)
in4conv2D = input.dimshuffle(0, 1, 'x', 2)
w_shp = (n_out, n_in, 1, windowSize)
if activation == T.nnet.relu:
W_values = np.asarray(rng.normal(scale=np.sqrt(2. / (n_in*windowSize + n_out)), size = w_shp), dtype=theano.config.floatX )
else:
W_values = np.asarray(
rng.uniform(low = - np.sqrt(6. / (n_in*windowSize + n_out)), high = np.sqrt(6. / (n_in*windowSize + n_out)), size = w_shp),
dtype=theano.config.floatX
)
if activation == T.nnet.sigmoid:
W_values *= 4
self.W = theano.shared(value=W_values, name='ResConv1d_W', borrow=True)
b_shp = (n_out,)
self.b = theano.shared(np.asarray( rng.uniform(low=-.0, high=.0, size=b_shp), dtype=input.dtype), name ='ResConv1d_b', borrow=True)
if dilation > 1:
conv_out = T.nnet.conv2d(in4conv2D, self.W, filter_shape=w_shp, border_mode='half', filter_dilation=(1, dilation) )
else:
conv_out = T.nnet.conv2d(in4conv2D, self.W, filter_shape=w_shp, border_mode='half')
if activation is not None:
conv_out_bias = activation(conv_out + self.b.dimshuffle('x', 0, 'x', 'x'))
else:
conv_out_bias = (conv_out + self.b.dimshuffle('x', 0, 'x', 'x'))
out2 = conv_out_bias.dimshuffle(0, 1, 3, 2)[:, :, :, 0]
if mask is not None:
out2_sub = out2[:, :, :mask.shape[1] ]
mask_new = mask.dimshuffle(0, 'x', 1)
self.output = T.set_subtensor(out2_sub, T.mul(out2_sub, mask_new) )
else:
self.output = out2
self.params=[self.W, self.b]
self.paramL1 = abs(self.W).sum() + abs(self.b).sum()
self.paramL2 = (self.W**2).sum() + (self.b**2).sum()”将这段theano代码转成torch的