tensorflow基础理解——框架、维度

tensorflow架构理解:

https://blog.csdn.net/u012609509/article/details/52574235

建立一个计算图,任何的数学运算可以使用TensorFlow支撑。
初始化变量编译预先定义的变量。
创建session,这是神奇开始的地方 !
在session中运行图形,编译图形被传递到session,它开始执行操作。
关闭session,结束这次使用。

tensorflow就是要定义一个图,然后通过Session来运算这个图。
比如:定义了一个图,输入x——W1 x x+b1=y1 这就是一个节点的值——W2 x y1+b2=y…
定义这个图时,我们首先需要对输入x进行占位处理,由于这个x并不需要机器学习,是源源不断的输入,对于这样的量,tensorflow要求用用placeholder占位。还有另一种变量,比如W1、b1、W2、b2这种变量,需要计算机去学习还要占位置才能保证图的完整性,tensorfllow要求用variable去定义。

#tensorflow首先会构建一个需要完成的所有操作的图表,然后当“session”被调用时,它将“run”该图表。
# 简化调用库名
import tensorflow as tf
import numpy as np

# 模拟生成100对数据对, 对应的函数为y = x * 0.1 + 0.3
x_data = np.random.rand(100).astype("float32")
y_data = x_data * 0.1 + 0.3

# 指定w和b变量的取值范围(注意我们要利用TensorFlow来得到w和b的值)
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b

# 最小化均方误差
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)  #定义了一个梯度下降法的优化算法
train = optimizer.minimize(loss)  #使用刚才定义的梯度下降算法来使损失函数最小   
#但是记住,这些都只是定义图和各种算法,但是并没有执行图和优化算法呢。

# 初始化TensorFlow参数
init = tf.initialize_all_variables()

# 运行数据流图(注意在这一步才开始执行计算过程)
sess = tf.Session()
sess.run(init)

# 观察多次迭代计算时,w和b的拟合值
for step in xrange(201):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(W), sess.run(b))

# 最好的情况是w和b分别接近甚至等于0.1和0.3

tensorflow维度理解:

各种例子理解: https://www.cnblogs.com/rossoneri/p/8029940.html
各种shape理解: https://blog.csdn.net/shuzfan/article/details/79051042
x = tf.constant([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]])
x实际上就是:
[ [ 1. 2. 3.]
[ 4. 5. 6.]
[ 7. 8. 9.] ]
shape是(3,3),第一对[ ]中有三个向量维度,所以第一维是3,这三维中的每一维,也就是第二个[ ]中也有三个元素,所以第二维也是。因此shape为(3,3)
这种二维的我们可以理解为,是一个3行3列矩阵

x = tf.constant([[[1., 1.], [2., 2.]], [[3., 3.], [4., 4.]]])
x实际上是:
[ [ [ 1. 1.]
[ 2. 2.]]

[ [ 3. 3.]
[ 4. 4.] ] ]
shape(2,2,2)
这种三维的我们也可以理解为是2个2行2列的矩阵

但是再高一维,我们就不能在以一个具体的实例来理解了,只能把这些看做是单纯的向量了~

例子理解一下:
比如yolov1中将格子划分成了7x7的大小,每个格子产生2个框,每个框产生4个坐标(x,y,h,w)
所以在坐标那里的代码维度假设考虑为向量,那么向量的shape就应该是(7,7,2,4)
第一个[ ]中会有7个[ ]作为第一维度的向量 [ [ ] , [ ] , [ ] , [ ] , [ ] , [ ] , [ ] ] 如果取第一维度为0的元素,那么实际上就可以理解为,取走所有第一行的网格格子(7个网格)产生的方框(7x2个方框),每个方框4个坐标,也就是取走了7x2x4个元素
然后每一个[ ]中又有7个[ ],再有2个[ ],最后再有4个数字,其实就是一个套一个。
代码中经常取的是[:,:,:,:,0] ,意味着,取走最后一维向量中的第一个元素,最后一维是坐标(x,y,h,w),取走第一个元素,也就意味着取走所有框7x7x2个框的x元素。

其实也就是,你取某一行,那就是取走所有这一行的信息,你取某一列,也就取走所有关于这一列的信息,你取某一个坐标,那就是取走所有关于这个坐标的信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值