x=tf.linspace(-3.0,3.0,100),tf.linspace()称为操作,任何一次操作的结果都得到Tensor
print(x) 输出:Tensor("LinSpace:0", shape=(100,), dtype=float32)返回值是一个Tensor,不是数值,其中"LinSpace:0"是Tensor的名字,表示LinSpace空间的第0个输出!
查看默认图及其操作g=get_default_graph(),[op.name for op in g.get_operations()]
输出:['LinSpace/start', 'LinSpace/stop', 'LinSpace/num', 'LinSpace']
通过名字访问任何张量的输出g.get_tensor_by_name("Linspace"+":0")
输出:<tf.Tensor 'LinSpace:0' shape=(100,) dtype=float32>
运行时先启动session,最后关闭session:sess=tf.Session(), print(sess.run(x)),sess.close()
输出:[-3. -2.939394 -2.87878799 ……]
管理图sess=tf.Session(graph=g),sess.close(),关闭默认图。
创建新图g2=tf.Graph()
简化输出过程,使用以下命令:
sess=tf.InteractiveSession()
x.eval()
输出:array([-3. , -2.939394 ,……],dtype=float32)
得到张量的shape
print(x.get_shape()) 输出:(100,)
print(x.get_shape().as_list())输出:[100]
创建一个标准正态分布:
mean=0
sigma=1
f=1.0/(tf.sqrt(2*3.1415)*sigma)*tf.exp(-0.5*tf.pow(x-mean,2)/tf.pow(sigma,2))
res=f.eval()
plt.plot(x,res)
输出:一个高斯图形
注意:如果图形、图像没显示,添加%matplotlib inline
使用f(高斯函数)创建一个2D高斯核
ksize=f.get_shape().as_list()[0]
z_2d=tf.matmul(tf.reshape(f,[ksize,1]),tf.reshape(f,[1,ksize))
tf.matul是两个矩阵乘积;tf.reshape(arg1,arg2),将arg1转变成arg2的形式,如arg2=[a,b],即位a行,b列的矩阵
plt.imshow(z_2d.eval())画出图形。
用高斯函数来进行图像的卷积(“卷积”我们先理解成过滤图像信息的工具)
使用tensorflow对图像做卷积,图像必须是4D的,即是将不是4D的转变成4D=N x H x W x C,使用tf.reshape(原始对象,目标对象),目标对象是个list[, , , ,]
高斯核也要转变成4D的,[Kernel Height,Kernel Width,Number of Input Channels,Number of Output Channels]
z_4d = tf.reshape(z_2d, [ksize, ksize, 1, 1])
print(z_4d.get_shape().as_list()) 输出:[ksize, ksize, 1, 1]
The number of input channels should match the number of channels on the image we want to convolve.
使用高斯核过滤图像
使用tf.nn.conv2d(被卷积图像,卷积核,strides=[],padding=" ")
convolved = tf.nn.conv2d(img_4d, z_4d, strides=[1, 1, 1, 1], padding='SAME')
res = convolved.eval()
print(res.shape)