为什么我会得到通过tf.nn.conv2d唯一一个带通道输出?(Why am I getting o

2019-09-27 03:02发布

import tensorflow as tf 
import numpy as np 
import matplotlib.pyplot as plt 
from scipy.misc import imread

img = imread('dog2.jpg')
#img is a shape of (360, 480, 3)

w =  img.shape[0]
h =  img.shape[1]
c =  img.shape[2]
k = 3 # for my convenience 

plt.subplot(1,2,1)
plt.imshow(img)
img = tf.cast(img, tf.float32)
img4d = tf.reshape(img,[1,w,h,c])
diag = np.array([[1,1,1],[0,0,0],[1,1,1]]*k, np.float32)
# diag = np.diag(diag)
diag4d = tf.reshape(diag,[k,k,c,1])
convolved = tf.nn.conv2d(img4d, diag4d, strides=[1,1,1,1], padding='SAME')

with tf.Session() as sess:
    result = sess.run(convolved)
    print result.shape
    plt.subplot(1,2,2)
    plt.imshow(np.squeeze(result))
    plt.show()

我只是想使用卷积和初步应用一些模糊效果。 是的,我知道我的核心价值观是不正确的。 但我的问题是,我给,拥有3个频道的输入图像。 我怎么能得到3个信道的输出图像。 好。 我试过了。 但我得到的是一些单独一个引导值。

Answer 1:

要传递形状的内核[3, 3, 3, 1]tf.nn.conv2d() 如果你想从您的卷积3通道的图像输出,内核的第四维(称为out_channels中正式文件 )应该是3而不是1 ; [3, 3, 3, 3]例如。

您还可以看看在conv2d文档 , 这个问题和这个问题,以便更好地了解Tensorflow的conv2d方法。



文章来源: Why am I getting only one channeled-output through the tf.nn.conv2d?