Tensor flow临时总结

Tensorflow 突发奇想地总结

你学的这些知识,将来工作又不用得到,那你学这个有什么意义?

1、可以把tensorflow 想象成汇编,即:

汇编拥有DataSegment 、 CodeSegment 、StackSegment等汇编运行的机制是 程序运行前,在DataSegment之中定义好,然后,在CodeSegment中写要执行的代码,mov AX ,0x333…之类。

2、而Tensor flow的机制如下:

可以理解为有: 数据段、计算关系段、执行(会话)

  • 第一,先定义好 数据如 tf.get_variable 或者tf.placeholder 、tf.constant等等,
  • 第二,其次定义他们之间的计算关系,如:
 train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step)
    with tf.control_dependencies([train_step, variable_averages_op]):
        # 先执行 train_step,再执行variable_averages_op
        # 最后执行train_op
        train_op = tf.no_op(name='train')

或者

 layer2 = tf.matmul(layer1, weights) + biases
 layer1 = tf.nn.relu(tf.matmul(input_tensor, weights) + biases)
等等。。。。。
  • 第三,建立Session 上下文本管理空间,
    在其中运行
    with tf.Session() as see:
    with tf.Session() as sess:
        tf.global_variables_initializer().run()
        for i in range(TRAINING_STEPS):
            # 一次取100个数据,利用mnist内部func
            xs, ys = mnist.train.next_batch(BATCH_SIZE)
            #  列表[]中的是要计算的东西,feed_dict 是给其中用到的变量赋值
            _, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x: xs, y_: ys})
3、Tensor flow的机制决定了其运行也与众不同:
cnt =tf.Variable(tf.zeros([2,2]))
x = tf.constant([[2.0,2.0],[1.0,1.0]],name='a')
y = tf.add(x,cnt)

y2 = tf.assign(cnt,y)
with tf.Session() as ses:
    ses.run(tf.global_variables_initializer())
    print(ses.run(y2))
    for i in range(3):
        print("~~~~~~~~")
        ses.run(y2)
        print(ses.run(cnt))
        
结果: 
[[ 2.  2.]
 [ 1.  1.]]
~~~~~~~~
[[ 4.  4.]
 [ 2.  2.]]
~~~~~~~~
[[ 6.  6.]
 [ 3.  3.]]
~~~~~~~~
[[ 8.  8.]
 [ 4.  4.]]

所有定义的所谓的变量,都是代表了一种计算关系。比如:

  • y  代表的是 x和cnt相加这个运算

  • y2  代表的是把 y 幅值给 cnt 这个变量的操作

  • 以上所说的计算关系,都是未发生的,如果想成真,那么就要在Session的run()方法来操作,如code所示。

  • 此外,再调用运行y2的同时,也会调用到y,那么y2其实也包含着y的计算过程,如CODE所示,for i in range(3)中,运行了三次y2

  • 那么就意味着,运行三次把 y 幅值给cnt 这个变量的操作,

  • 而同时,y代表的是 x和cnt相加这个运算 ,

  • 所以就是说把x和cnt相加这个运算 运行三次,每次都赋值给cnt

3、所以我有个想法就是:

我们不要把,y2和y看作变量,而是应该将他们看作是一个计算关系
  而cnt 和x 才应该被看作变量或者常量,而对变量的幅值,是利用assign这个函数进行的。并不是直接等于。
  以上的代码还可以,这么来看

cnt =tf.Variable(tf.zeros([2,2]))
x = tf.constant([[2.0,2.0],[1.0,1.0]],name='a')
y = tf.add(x,cnt)
y2 = tf.assign(cnt,y)
with tf.Session() as ses:
    ses.run(tf.global_variables_initializer())

    print(ses.run(y2))
    print('~~~~~~~~~~')
    print(ses.run(y2))
    print('~~~~~~~~~~')
    print(ses.run(y2)) 
结果:
[[ 2.  2.]
 [ 1.  1.]]
~~~~~~~~~~
[[ 4.  4.]
 [ 2.  2.]]
~~~~~~~~~~
[[ 6.  6.]
 [ 3.  3.]]

每次ses.run(y2),都是代表执行了y2这个计算关系,即把y赋值给cnt,
cnt是常量,而y是计算关系,所以y这个计算关系也被执行。

4、另一个例子就是在模型训练的时候:
with tf.name_scope('train'):
    y_ = tf.multiply(w,x,name='output_y')
    y = tf.constant(0.0,name='True_y')
    loss =tf.pow(y_-y,2,name='loss')
    train_step = tf.train.GradientDescentOptimizer(LearningRate).minimize(loss)


with tf.Session() as ses:
    ses.run(tf.global_variables_initializer())
    for i in range(100):
        temp = ses.run(train_step)
    print("loss: ",ses.run(loss))
    print("w: ",ses.run(w))
    
结果:
loss:  1.06228e-19
w:  1.62963e-10

可以看到在整个Session的for循环当中,只调用了run(train_step)这个计算关系,然而,却能可以在最后读取到训练完毕的 loss损失和W权重。

可见该思路正确可以作为记忆

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值