从零开始,阅读一篇人工智能论文
来源:互联网 发布:淘宝卖家怎么开直通车 编辑:程序博客网 时间:2024/06/04 23:24
作者/分享人:李嘉璇,《TensorFlow技术解析与实战》作者,InfoQ、51CTO、Oreilly Strata等大会讲师,活跃于国内各大技术社区,知乎编程问题回答者。擅长研究深度学习框架的架构、源码分析及在不同领域的应用。有处理图像、社交文本数据情感分析、数据挖掘等深度学习实战经验,参与过基于深度学习的自动驾驶二维感知系统Hackathon竞赛, 曾任职百度研发工程师。现在研究NLP、ChatBot,以及TensorFlow的性能优化及FPGA编译。
一、从零开始,阅读一篇论文的层次
认真读懂标题、摘要、简介(title, abstract, and introduction)。
只读各个部分和子部分(section and sub-section)的标题,跳过具体内容。
读懂结论和讨论(作者通常会在这里论述本研究的不足和缺失,为未来的研究提供建议,指明方向)。
浏览参考文献,记下哪些文献是你已经读过的。
文章分类:关于实现方法的文章?对于已有系统的分析文章?对于研究理论的描述文章?
内容:有没有对应的相关paper?这篇文章是基于什么样的基础理论?(theoretical bases)
文章的假设(assumptions)是真的正确么?
贡献:这篇文章是在效果上(state of art)有了明显进步?还是方法上有了创新?还是完善了基础理论?
清晰度:是一篇描述清晰的文章么?
对图、表的含义以及他们支持的结论弄懂。
记下参考文献中你认为重要的未读文献,它能让你对这篇文章的背景有深刻理解。
二、如何阅读包含很多数学内容的机器学习论文
TensorFlow的编程模型和基本概念
加载数据及定义超参数;
构建网络;
训练模型;
评估模型和进行预测。
import tensorflow as tfimport numpy as np# 编造满足一元二次方程的函数x_data = np.linspace(-1,1,300)[:, np.newaxis] # 为了使点更密一些,我们构建了300个点,分布在-1到1区间,直接采用np生成等差数列的方法,并将结果为300个点的一维数组,转换为300×1的二维数组noise = np.random.normal(0, 0.05, x_data.shape) # 加入一些噪声点,使它与x_data的维度一致,并且拟合为均值为0、方差为0.05的正态分布y_data = np.square(x_data) - 0.5 + noise # y = x^2 – 0.5 + 噪声
xs = tf.placeholder(tf.float32, [None, 1])ys = tf.placeholder(tf.float32, [None, 1])
def add_layer(inputs, in_size, out_size, activation_function=None): # 构建权重:in_size×out_size大小的矩阵 weights = tf.Variable(tf.random_normal([in_size, out_size])) # 构建偏置:1×out_size的矩阵 biases = tf.Variable(tf.zeros([1, out_size]) + 0.1) # 矩阵相乘 Wx_plus_b = tf.matmul(inputs, weights) + biases if activation_function is None: outputs = Wx_plus_b else: outputs = activation_function(Wx_plus_b)return outputs # 得到输出数据# 构建隐藏层,假设隐藏层有10个神经元h1 = add_layer(xs, 1, 20, activation_function=tf.nn.relu)# 构建输出层,假设输出层和输入层一样,有1个神经元prediction = add_layer(h1, 20, 1, activation_function=None)
# 计算预测值和真实值间的误差loss = tf.reduce_mean(tf.reduce_sum(tf.square(ys - prediction), reduction_indices=[1]))train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
init = tf.global_variables_initializer() # 初始化所有变量sess = tf.Session()sess.run(init)for i in range(1000): # 训练1000次 sess.run(train_step, feed_dict={xs: x_data, ys: y_data}) if i % 50 == 0: # 每50次打印出一次损失值 print(sess.run(loss, feed_dict={xs: x_data, ys: y_data}))
TensorFlow的基本实现
在GPU1和GPU2上分别定义模型网络结构。
对于单个GPU,分别从数据管道读取不同的数据块,然后进行前向传播,计算出损失,再计算当前变量的梯度。
把所有GPU输出的梯度数据转移到CPU上,先进行梯度求平均操作,然后进行模型变量的更新。
重复第1步至第3步,直到模型变量收敛为止。
# 第1步:命令行参数解析,获取集群的信息ps_hosts和worker_hosts,以及当前节点的角色信息job_name和task_index。例如:tf.app.flags.DEFINE_string("ps_hosts", "", "Comma-separated list of hostname:port pairs")tf.app.flags.DEFINE_string("worker_hosts", "", "Comma-separated list of hostname:port pairs")tf.app.flags.DEFINE_string("job_name", "", "One of 'ps', 'worker'")tf.app.flags.DEFINE_integer("task_index", 0, "Index of task within the job")FLAGS = tf.app.flags.FLAGSps_hosts = FLAGS.ps_hosts.split(",")worker_hosts = FLAGS.worker_hosts(",")# 第2步:创建当前任务节点的服务器cluster = tf.train.ClusterSpec({"ps": ps_hosts, "worker": worker_hosts})server = tf.train.Server(cluster, job_name=FLAGS.job_name, task_index=FLAGS.task_index)# 第3步:如果当前节点是参数服务器,则调用server.join()无休止等待;如果是工作节点,则执行第4步if FLAGS.job_name == "ps": server.join()# 第4步:构建要训练的模型,构建计算图elif FLAGS.job_name == "worker":# build tensorflow graph model# 第5步:创建tf.train.Supervisor来管理模型的训练过程# 创建一个supervisor来监督训练过程sv = tf.train.Supervisor(is_chief=(FLAGS.task_index == 0), logdir="/tmp/train_logs")# supervisor负责会话初始化和从检查点恢复模型sess = sv.prepare_or_wait_for_session(server.target)# 开始循环,直到supervisor停止while not sv.should_stop() # 训练模型
寻找定位词和标点符号,切分成短句。
职位
内容:
(营业员/学徒);负责:
吧台,跟随师傅调制 饮料,切配果盘,小吃;待遇:
正式员工底薪3000- 3500元/月+奖金+五险一金,公司包吃住;工作地点:
公司根据员工住所安排最近的上班地点。从短句中基于特征字/词定位核心内容
(营业员/学徒)吧台,跟随师傅调制饮料,
切配
果盘,小吃正式员工底薪3000-3500
元/月+奖金+五
险一
金公司根据员工住所安排最近
的上班地点
核心词抽取
营业员 学徒吧台 调制饮料 切配果盘 小吃底薪3000-3500元/月 奖金 五险一金最近的上班地点
动词后面连续的名词、简称
词组联合共现频率高。动词+形容词,动词+副词的组合
- 从零开始,阅读一篇人工智能论文
- 从零开始,如何阅读一篇人工智能论文,及构建论文与代码的实现
- 如何阅读一篇论文
- 如何阅读一篇论文
- 如何阅读一篇论文
- 如何阅读一篇论文
- 论文阅读 第一篇:mutual context model
- 第一篇论文阅读,后记,presentation总结
- 每日一篇论文阅读------图像分割篇
- 悄然无息第一篇:阅读一篇论文的随手记要
- 一篇声呐3D建模综述论文阅读记录
- 一篇论文
- 阅读论文
- 阅读论文
- 论文阅读
- 论文阅读
- 论文阅读
- 苹果公布首份人工智能报告:一篇关于机器学习的论文
- cookie和session的区别
- JS学习笔记day1
- Kettle日志输出到文件方法
- 虚拟机安装CentOS 7, 安装Docker CE
- FPGA:下一代机器人感知处理器
- 从零开始,阅读一篇人工智能论文
- 使用xshell第一次连接时,可能会连接多次才能连上,出现:WARNING!The remote SSH server rejected X11 forwarding request.
- “捡垃圾”都被骗,闲鱼的二手梦会否变成噩梦?
- OpenCV笔记(1)载入图像 视频播放 读取摄像头
- 软件调试笔记49
- neo4j的使用
- 硬币问题
- 安卓自定义流式布局——真正像潺潺流水一样
- K-nn手写数字识别--Python版