tensorflow阶段性学习总结(一)

    • TensorFlow
      • Graph:图,表示计算任务。即我们要做的一些操作
        一个Graph能使用多个Session,每个Session都必须进行初始化变量,并且新session的值完全独立于之前的session的值
      • Session:会话,建立会话,相当于工作车间
        通过调用sess.run(Graph参数)来执行对应op,记得在任务完成后调用sess.close()方法关闭会话,或者可以使用“with”代码块来自动完成关闭动作,如:with tf.Session() as sess:
        result = sess.run([product])
        print(result)​​
      • Tensor:数据,即待处理的原料
      • Variable:变量,记录数据和状态,盛装原料的容器
        • 变量的操作通过调用tf模块中的variable = tf.Variable(initialize,name='xxx')进行定义,赋值通过调用assign = variable.assign()方法进行赋值,但在进行一个session前必须对变量进行初始化initialize = tf.initialize_all_variables()操作,否则报错,并且变量的赋值只在当前session中生效
          如: graph = tf.Graph()
          with graph.as_default():
          variable = tf.Variable(42, name='foo')
          initialize = tf.initialize_all_variables()
          assign = variable.assign(13)

          with tf.Session(graph=graph) as sess:
          sess.run(initialize)
          sess.run(assign)
          print(sess.run(variable))
          # Output: 13​
      • feed,fetch:可以为任意的操作(arbitrary operation)赋值或从中获取数据,相当于铲子
      • 通过调用tf.device()方法来决定机器的那些CPU或者GPU参与计算。如: with tf.device("/gpu:1"): 表示调用机器的第二个GPU参与计算。
    • Softmax Regression(“hello,world!”)
      • 将图像认为是由特定像素组成的数组形式。将数组扁平化得到一组特定的数字
      • 模型的设计
        • 1)使用一个最简单的单层神经网络进行学习
          • 神经网络:由很多个神经元组成,每个神经元接受很多个输入【X1,X2......Xn】,加权相加然后加上偏移量后,看是不是超过了某个阈值,if大于阈值为1,else为0。多个神经元互相连接,形成了神经网络。
        • 2)用softmax作为激活函数
          • 激活函数:每个神经元,在通过一系列计算后,得到了一个数值,通过激活函数来判断该数值应该怎么输出。而激活函数必须满足两个条件:①处处可微,可微分才能求导,求极值。②非线性的,因为线性模型的表达能力不够。
            • 目前几个主流的激活函数是:sigmoid,tanh,ReLU。
              • sigmoid:采用S形函数,取值范围【0,1】
              • tanh:双切正切函数,取值范围【-1,1】
              • ReLU:简单粗暴,大于0的留下,否则一律为0
          • SoftMax:max(A,B)是指A和B取最大值,但有时候希望较小的数也有一定概率被取到,因此按照两个值的大小,计算出概率,按照这个概率来取A或者B,比如A=9,B=1,则取A的概率为90%,B的概率为10%。相较max(A,B)的方式柔和一些,因此叫SoftMax【个人理解】
        • 3)用交叉熵作为损失函数
          • 损失函数是模型对数据拟合程度的反应,拟合得越好损失应该越小,拟合越差损失应该越大,然后根据损失函数的结果对模型进行调整。
          • 交叉熵:通俗地讲就是当前训练程度和圆满程度之间的距离,我们希望距离越小越好,所以交叉熵可以作为一个损失函数,来衡量和目标之间的距离。
        • 4)用梯度下降作为优化方式
          • 梯度下降:可以理解为要解决的问题是一座山,答案在山底,我们从山顶到山底的过程就是解决问题的过程。求解最优解的过程实际上就是寻找最陡山路的过程,因此需要用梯度来量化陡峭程度。
      • 代码实现
        • 载入数据,并对数据进行处理
          • 1)把输入和结果分开
          • 2)对输入进行处理:把一维的输入变成28*28的矩阵
          • 3)对结果进行处理:把结果进行One-Hot编码
          • 4)把训练数据划分训练集和验证集
          • 5)对训练集进行分批
        • 建立神经网络,设置损失函数,设置梯度下降的优化参数
        • 初始化变量,设置好准确度的计算方法,在Session中运行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值