前言
本文主要介绍简单的TensorFlow安装以及一个卷积模型的小例子,便于读者理解。
1:Tensorflow 安装:
首先目前已学习的方法中有两种方法可用于安装TensorFlow:一是pip,二是Anaconda。
另外 TensorFlow还有cpu和Gpu两个版本。
使用pip安装
1)下载安装Python
2)打开windows的命令行窗口,安装CPU版本
pip installtensorflow
安装GPU版本
Pip install tensorflow-gpu
之后验证是否安装了 TensorFlow 可以尝试一下代码
>>> importtensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
之后我们来稍微了解一下卷积模型。
2:卷积:(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算式,表征函数f 与g经过翻转和平移的重叠部分的面积。卷积是在信号与线性系统的基础上或背景中出现的,脱离这个背景单独谈卷积是没有任何意义的。信号与线性系统,讨论的就是信号经过一个线性系统以后发生的变化(就是输入输出和所经过的所谓系统,这三者之间的数学关系)。都是要根据我们需要待处理的信号形式,来设计所谓的系统传递函数,那么这个系统的传递函数和输入信号,在数学上的形式就是所谓的卷积关系。
先看一下卷积实现原理,对于in_c个通道的输入图,如果需要经过卷积后输出out_c个通道图,那么总共需要in_c * out_c个卷积核参与运算。
此图中输入的是一个5*5*4的表格,那么对应输出的每个通道,都需要其度与原表格一致即四个卷积核,而由于5*5的表格经过3*3卷积后可为一个3*3的子表格,所以,最后就是分为 3*4个卷积核。
举个栗子:
2个通道,5*5的输入定义如下:
input_data=[
[[1,0,1,2,1],
[0,2,1,0,1],
[1,1,0,2,0],
[2,2,1,1,0],
[2,0,1,2,0]],
[[2,0,2,1,1],
[0,1,0,0,2],
[1,0,0,2,1],
[1,1,2,1,0],
[1,0,1,1,1]],
]
卷积核,shape=[in_c,k,k]=[2,3,3]
weights_data=[
[[ 1, 0, 1],
[-1, 1, 0],
[ 0,-1, 0]],
[[-1, 0, 1],
[ 0, 0, 1],
[ 1, 1, 1]]
]
上面定义的数据,在接下来的计算对应关系将按下图所描述的方式进行。
defget_shape(tensor):
[s1,s2,s3]= tensor.get_shape()
s1=int(s1)
s2=int(s2)
s3=int(s3)
return s1,s2,s3
defchw2hwc(chw_tensor):
[c,h,w]=get_shape(chw_tensor)
cols=[]
for i in range(c):
#每个通道里面的二维数组转为[w*h,1]即1列
line = tf.reshape(chw_tensor[i],[h*w,1])
cols.append(line)
#横向连接,即将所有竖直数组横向排列连接
input = tf.concat(cols,1)#[w*h,c]
#[w*h,c]-->[h,w,c]
input = tf.reshape(input,[h,w,c])
return input
同理,Tensorflow使用卷积核的时候,使用的格式是[k,k,in_c,out_c]。而我们在定义卷积核的时候,是按[in_c,k,k]的方式定义的,这里需要将[in_c,k,k]转为[k,k,in_c],由于为了简化工作量,我们规定输出为1个通道,即out_c=1。所以这里我们可以直接简单地对weights_data调用chw2hwc,再在第3维度扩充一下即可。
最后输出结果为:
[[ 2. 0. 2. 4. 0.]
[ 1. 4. 4. 3. 5.]
[ 4. 3. 5. 9. -1.]
[ 3. 4. 6. 2. 1.]
[ 5. 3. 5. 1. -2.]]
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删