2017-02-28 51 views
1
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個通道的輸出圖像。好。我試過了。但我所得到的僅僅是一個獨特的價值觀。爲什麼我只能通過tf.nn.conv2d獲得一個通道輸出?

回答

1

您正在將形狀[3, 3, 3, 1]的內核傳遞給tf.nn.conv2d()。如果您想從卷積中獲得3通道圖像輸出,則內核的第四維(official documentation中的out_channels)應爲3而不是1;例如,[3, 3, 3, 3]

您也可以看看conv2d documentation,this questionthis question,以更好地瞭解Tensorflow的方法conv2d

+0

它的工作。謝謝。 –

+0

如果我的答案適合您,請考慮接受它。 [Here's](http://stackoverflow.com/help/someone-answers)如何做到這一點。 – jabalazs

相關問題