直接上代码吧:
import numpy as np
import tensorflow as tf
#此代码仅用于演示conv2d的参数意义,主要是padding,stride
#先以2维矩阵测试,通道为channels
input_channels=1
input_data=np.reshape(np.linspace(1.0,60.0*input_channels,num=60*input_channels),[1,6,10,input_channels])
filter_data=np.random.randint(-1,1,[3,3,input_channels,1])
if input_channels==1:
squeeze_input=tf.squeeze(input_data,axis=[0,3])
squeeze_filter=tf.squeeze(filter_data,axis=[2,3])
else:
squeeze_input=tf.squeeze(input_data,axis=[0])
squeeze_filter=tf.squeeze(filter_data,axis=[3])
conv_valid_result=tf.nn.conv2d(input=input_data,filter=filter_data,strides=[1,1,1,1],padding="VALID")
conv_same_result=tf.nn.conv2d(input=input_data,filter=filter_data,strides=[1,1,1,1],padding="SAME")
sess=tf.Session()
print("----------------------------待卷积的数据---------------------------")
print(sess.run(squeeze_input))
print('----------------------------卷积核数据---------------------------')
print(sess.run(squeeze_filter))
cv1=sess.run(conv_valid_result)
print('-------------------------VALID(窄卷积结果)---------------------------')
if input_channels==1:
print(sess.run(tf.squeeze(cv1,axis=[0,3])))
else:
print(sess.run(tf.squeeze(cv1,axis=[0])))
cv2=sess.run(conv_same_result)
print('-------------------------SAME(同卷积结果)---------------------------')
if input_channels==1:
print(sess.run(tf.squeeze(cv2,axis=[0,3])))
else:
print(sess.run(tf.squeeze(cv2,axis=[0])))
运算结果如下:
----------------------------待卷积的数据---------------------------
[[ 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.]
[11. 12. 13. 14. 15. 16. 17. 18. 19. 20.]
[21. 22. 23. 24. 25. 26. 27. 28. 29. 30.]
[31. 32. 33. 34. 35. 36. 37. 38. 39. 40.]
[41. 42. 43. 44. 45. 46. 47. 48. 49. 50.]
[51. 52. 53. 54. 55. 56. 57. 58. 59. 60.]]
----------------------------卷积核数据---------------------------
[[-1 0 0]
[ 0 0 0]
[-1 -1 0]]
-------------------------VALID(窄卷积结果)---------------------------
[[ -44. -47. -50. -53. -56. -59. -62. -65.]
[ -74. -77. -80. -83. -86. -89. -92. -95.]
[-104. -107. -110. -113. -116. -119. -122. -125.]
[-134. -137. -140. -143. -146. -149. -152. -155.]]
-------------------------SAME(同卷积结果)---------------------------
[[ -11. -23. -25. -27. -29. -31. -33. -35. -37. -39.]
[ -21. -44. -47. -50. -53. -56. -59. -62. -65. -68.]
[ -31. -74. -77. -80. -83. -86. -89. -92. -95. -98.]
[ -41. -104. -107. -110. -113. -116. -119. -122. -125. -128.]
[ -51. -134. -137. -140. -143. -146. -149. -152. -155. -158.]
[ 0. -41. -42. -43. -44. -45. -46. -47. -48. -49.]]