tensorflow---入门基础知识

0. 参考文章

1. MNIST机器学习入门
2. 基本使用
3. 张量的阶、形状、数据类型
4. 深入MNIST
5. TensorFlow运作方式入门
6. tensorboard官方参考文档
7. tensorflow机器学习模型上线

1. 基础篇(概念和卷积经典函数api)

tensorflow运行op的最最基础概念 :在TensorFlow中,所有的操作只有当你执行(run),或者另一个操作依赖于它的输出时才会运行

(这里可以参考这些文章)

1. MNIST机器学习入门
2. 基本使用
3. 张量的阶、形状、数据类型

  1. tensorlfow的计算图概念
  2. session概念
  1. TensorFlow 程序通常被组织成一个构建阶段和一个执行阶段. 在构建阶段, op 的执行步骤 被描述成一个图. 在执行阶段, 使用会话执行执行图中的 op.
  2. 一个 TensorFlow 图描述了计算的过程. 为了进行计算, 图必须在 会话 里被启动. 会话 将图的 op 分发到诸如 CPU 或 GPU 之类的 设备 上, 同时提供执行 op 的方法.
  1. feed和fetch

feed喂数据
fetch接受run某个op,这个op返回的数据

  1. tensorflow卷积函数
W = tf.truncated_normal([5, 5, 1, 32], stddev=0.1)
tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')

1、shape= [5,5,1,32]
前面两个5,表示卷积核的长宽分别为5,1表示输入图像对应的通道数,比如输入的图像是单通道的则设置为1,如果是RGB三通道的,则设置为3. 32表示卷积核的个数,对应输出32张图
2、strides=[1, 2, 2, 1]
四个元素规定前后必须为1,中间两个数表示水平滑动和垂直滑动步长值
3、padding=‘SAME’
SAME表示在扫描的时候,如果遇到卷积核比剩下的元素要大时,这个时候需要补0进行最后一次的行扫描或者列扫描

  1. tensorflow池化函数
tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
                        strides=[1, 2, 2, 1], padding='SAME')

在这里插入图片描述

  1. tf.reshape函数
x_image = tf.reshape(x, [-1,28,28,1])

重塑张量,一般用于卷积和全连接层连接之间步骤,数据输入时也常见

  1. tf.nn.dropout
# 全连接层
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)

# dropout
keep_prob = tf.placeholder("float")
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
  1. 为了防止或减轻过拟合而使用的函数,它一般用在全连接层后
  2. dropout需要传入keep_porb,这个参数一般feed进入(当然,一般evaluation和预测时,此值传1,神经单元不失活)
  1. tf.equal
correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
  1. tf.argmax返回对应数据最大的下坐标(矩阵)
  2. 比较两个张量,返回值为bool类型
  3. 通常用tf.cast将bool类型强转为float方便计算准确率
  4. 上述代码组合常见在分类模型最后
  1. tf.name_scope and tf.variable_scope
    具体参考文章

(1) tf.variable_scope可以让变量有相同的命名,包括tf.get_variable得到的变量,还有tf.Variable的变量
(2) tf.name_scope可以让变量有相同的命名,只是限于tf.Variable的变量
(3) 解释一下: 使用命名空间的好处很多,比如你的代码会分块(如果你用tensorboard画图,这样分块也会体现在图上,更清晰),再比如你可以通过循环方式创建神经网络层(卷积层)而不用担心命名问题(name)等

  1. tf.get_variable

    具体参考文章

在这里插入图片描述

  1. 文章推荐用tf.get_variable(原因见文章),个人赞同.
  2. 不过我看过很多代码,用的大多是tf.Variable(),只记得好像在embedding层时见过用tf.get_variable,还是因为需要xavier_initializer初始化
  3. 最后具体情况具体分析呗,也可能是我菜看得不够多.
  1. global training step

    具体可见文章

global_step = tf.Variable(0, name='global_step', trainable=False)
train_op = optimizer.minimize(loss, global_step=global_step)
  1. 就是一个全局计数器,记录你训练了多少轮,
  2. 在滑动平均、优化器、指数衰减学习率,画图等方面都有用到
  3. 损失函数优化器的minimize()中global_step=global_steps能够提供global_step自动加一的操作

2. 基础运行方式

参考:官方文档

  1. tensorflow编写代码基本模板
    (1)== inference: 构建图表,就是搭建前向神经网络,到output or logits Tensor
    (2) loss and optimi: 选择对应损失函数,根据label( y placeholder)以及第一步计算出的logits求损失值,并选择对应优化器.
    (3) training and evaluation:
    一般编码习惯:(1)(2)在model.py中建立一个model类,在其中搭建完成,(3)在train.py中搭建train类用于训练 + evaluation(没多少次在验证集上计算下loss),predict类一般也在此文件中

3. 状态可视化(tensorboard)

6. tensorboard官方中文介绍
7 . summary api介绍

  • 建议先看[6]或者看下面对于声明周期的简单介绍,明白其过程,再去扣细节(经验之谈,以前学得时候只看代码…后悔没早看到这个生命周期)

TensorBoard 中汇总数据(Summary data)的大体生命周期:

  1. 创建你想汇总数据的 TensorFlow 图
  2. 选择你想在哪个节点进行汇总(summary)操作(具体介绍可见下面的详细代码)
  3. 为了生成汇总信息,我们需要运行所有这些节点。这样的手动工作是很乏味的,因此可以使用tf.merge_all_summaries来将他们合并为一个操作.
  4. run(执行合并后的summary),它会依据特点步骤将所有数据生成(返回)一个序列化的Summary protobuf对象
  5. 为了将汇总数据写入磁盘,需要将汇总的protobuf对象传递给tf.train.Summarywriter
  6. 写入磁盘后,可以通过tensorboard对应命令,读取在浏览器内查看.
  7. (下载tensorflow时会自动下载tensorboard,注意两者版本对应(这里指你乱下,乱删可能没弄干净),不然会报错(具体什么错忘了))
  • 具体简单代码可见下:
''' tensorboard生命周期流程(后半段)'''
merged_summary_op = tf.merge_all_summaries()
summary_writer = tf.train.SummaryWriter('/tmp/mnist_logs', sess.graph)
total_step = 0
while training:
  total_step += 1
  session.run(training_op)
  
  # 按照一定规律写入
  if total_step % 100 == 0:
    summary_str = session.run(merged_summary_op)
    summary_writer.add_summary(summary_str, total_step)

4. checkpoint(检查点)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值