使用Theano在特征映射上转置卷积

时间:2017-01-04 09:51:05

标签: machine-learning deep-learning theano convolution deconvolution

我在 CrossValidation 上就图像解释提出了类似的问题。我在这里移动我的详细问题以包含一些代码细节。

我所拥有的结果并不完全令人满意所以也许你以前遇到过这个问题,你可以帮我找到它。

完全卷积神经网络"没有完全连接的部分"。

培训部分

首先转换图像以匹配卷积函数。 (的batch_no,img_channels,宽度,高度)

input.transpose(0, 3, 1, 2)

使用学习率优化学习:3e-6,Hu_uniform初始化和nestrove 500个时期直到这个收敛。

  • 培训费用:1.602449
  • 训练损失:4.610442
  • 验证错误:5.126761
  • 测试损失:5.885714

后退部分

  

载入图片

jpgfile = np.array(Image.open(join(testing_folder,img_name)))
  

重塑为一批

batch = jpgfile.reshape(1, jpgfile.shape[0], jpgfile.shape[1], 3)
  

运行模型以使用Relu

激活后提取第一个要素图
output = classifier.layer0.output
    Test_model = theano.function(
        inputs=[x],
        outputs=output,
    )

    layer_Fmaps = Test_model(test_set_x)
  

应用背景模型,使用唯一激活的图像重建图像   神经元

bch, ch, row, col = layer_Fmaps.shape
output_grad_reshaped = layer_Fmaps.reshape((-1, 1, row, col))
output_grad_reshaped = output_grad_reshaped[0].reshape(1,1,row,col)
input_shape = (1, 3, 226, 226)
W = classifier.layer0.W.get_value()[0].reshape(1,3,7,7)
kernel = theano.shared(W)
inp = T.tensor4('inp')
deconv_out = T.nnet.abstract_conv.conv2d_grad_wrt_inputs(
            output_grad = inp,
            filters=kernel,
            input_shape= input_shape,
            filter_shape=(1,3,7,7),
            border_mode=(0,0), 
            subsample=(1,1)
        )
f = theano.function(
            inputs = [inp],
            outputs= deconv_out)

f_out = f(output_grad_reshaped)
deconved_relu =  T.nnet.relu(f_out)[0].transpose(1,2,0)
deconved =  f_out[0].transpose(1,2,0)

这里我们有两个图像结果,第一个是没有激活的转置图像,第二个是relu,因为内核可能有一些负权重。

without Relu With Relu

从转置的卷积图像可以清楚地看出,该内核学会了检测与该图像相关的一些有用特征。但是重建部分在转置卷积期间打破了图像颜色方案。这可能是因为像素值是小的浮点数。你知道这里的问题在哪里吗?

0 个答案:

没有答案