文档章节

Tensorflow——快速入门

小埋酱
 小埋酱
发布于 2017/03/16 21:26
字数 846
阅读 50
收藏 0

假设已经安装好TensorFlow了,具体怎么装,参考TensorFlow的官方文档

Tensor

TensorFlow的核心就是tensor,也就是张量 先来看看tensor的概念,官方文档的几个示例如下

3 # 0阶的张量,是一个标量,shape为[]
[1. ,2., 3.] # 1阶的张量,是一个shape[3]的向量
[[1., 2., 3.], [4., 5., 6.]] # 2阶张量,是一个[2,3]的矩阵
[[[1., 2., 3.]], [[7., 8., 9.]]] # 3阶张量,shape为[2,1,3]

#基础示例

从示例里面可以学到几个常用的内容:

  • constant:常量
  • placeholder:变量,在计算公式里面占个位置,后续再把值给进去
  • Variables:带初始化值的变量
  • 损失函数:在统计学中损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关,如费用或者设备的损失)程度的函数。本示例中用了计算出来的值减去了实际的值,开方后,对整个向量进行了求和计算损失
  • 整个计算过程的目标就是让损失降到最小
import tensorflow as tf

# 定义两个常量
node1 = tf.constant(3.0, tf.float32)
node2 = tf.constant(4.0)  # 默认用tf.float32
print(node1, node2)

sess = tf.Session()
print(sess.run([node1, node2]))

node3 = tf.add(node1, node2)
print("node3 is ", node3)
print("node3 result is ", sess.run(node3))

#placeholder为占位符,在run的时候才把值传进去的
a = tf.placeholder(tf.float32) 
b = tf.placeholder(tf.float32)
adder_node = a + b  # + 被覆写了,等于tf.add

print(sess.run(adder_node, {a: 2, b: 6}))
print(sess.run(adder_node, {a: [1, 3], b: [2, 4]}))

add_and_triple = adder_node * 3
print(sess.run(add_and_triple, {a: 3, b: 4.5}))

# Variable是带初始值的变量,在下面global_variables_initializer的时候被初始化
W = tf.Variable([.3], tf.float32)
b = tf.Variable([-.3], tf.float32)
x = tf.placeholder(tf.float32)
linear_model = W * x + b  #一个最基本的线性函数

init = tf.global_variables_initializer() #初始化变量
sess.run(init)
print(sess.run(linear_model, {x: [1, 2, 3, 4]}))

#使用损失函数来计算
y = tf.placeholder(tf.float32)
squared_deltas = tf.square(linear_model - y)
loss = tf.reduce_sum(squared_deltas)
print(sess.run(loss, {x: [1, 2, 3, 4], y: [0, -1, -2, -3]}))

#修正变量,再算一次损失
fixW = tf.assign(W, [-1.])
fixb = tf.assign(b, [1.])
sess.run([fixW, fixb])
print(sess.run(loss, {x: [1, 2, 3, 4], y: [0, -1, -2, -3]}))

然后这个例子里面说明白了一个事情,y=ax+b这个公式里面,我们是通过手动调整W和b来让损失降低的,所以接下来要做的事情就是怎么样让他自动把函数里面的两个参调整好

#使用TensorFlow预置的模型

import tensorflow as tf
import numpy as np

#声明有多少个特征,https://www.tensorflow.org/api_docs/python/tf/contrib/layers/real_valued_column)
features = [tf.contrib.layers.real_valued_column("x", dimension=1)]

#使用线性回归模型
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features)

#初始化数据集
x = np.array([1., 2., 3., 4.])
y = np.array([0., -1., -2., -3.])
input_fn = tf.contrib.learn.io.numpy_input_fn({"x": x}, y, batch_size=4,
                                              num_epochs=1000)

#训练1000次
rs=estimator.fit(input_fn=input_fn, steps=1000)
#打印对应的权重与偏差
print(rs.bias_)
print(rs.weights_)

#然后就可以看到损失的结果了
print(estimator.evaluate(input_fn=input_fn))

好像。。又挺好用的嘛

#定义自己的模型

import numpy as np
import tensorflow as tf

# 声明特性列表
def model(features, labels, mode):
    #构建线性回归函数
    W = tf.get_variable("W", [1], dtype=tf.float64)
    b = tf.get_variable("b", [1], dtype=tf.float64)
    y = W * features['x'] + b

    # 构造损失函数
    loss = tf.reduce_sum(tf.square(y - labels))

    # 构造子训练图谱
    global_step = tf.train.get_global_step()
    optimizer = tf.train.GradientDescentOptimizer(0.01)
    train = tf.group(optimizer.minimize(loss),
                     tf.assign_add(global_step, 1))

    # ModelFnOps 连接我们构造的子训练图谱
    return tf.contrib.learn.ModelFnOps(
        mode=mode, predictions=y,
        loss=loss,
        train_op=train)


estimator = tf.contrib.learn.Estimator(model_fn=model)

x = np.array([1., 2., 3., 4.])
y = np.array([0., -1., -2., -3.])
input_fn = tf.contrib.learn.io.numpy_input_fn({"x": x}, y, 4, num_epochs=1000)

estimator.fit(input_fn=input_fn, steps=1000)
print(estimator.evaluate(input_fn=input_fn, steps=10))

© 著作权归作者所有

小埋酱

小埋酱

粉丝 50
博文 45
码字总数 30787
作品 5
广州
技术主管
私信 提问
AI学习笔记——机器学习中部分易混淆术语解析

image source from unsplash.com by Paweł Czerwiński 对于机器学习的初学者来说,容易被一些专用术语搞得晕头转向,这篇文章我们就从挑几个容易混淆的概念和术语接解析一下。 1. Batch 在...

Hongtao洪滔
04/01
0
0
Tensorflow 2.0 轻松实现迁移学习

image from unsplash by Gábor Juhász 迁移学习即利用已有的知识来学习新的知识,与人类类似,比如你学会了用笔画画,也就可以学习用笔来画画,并不用从头学习握笔的姿势。对于机器学习来说...

Hongtao洪滔
08/20
0
0
入门 | TensorFlow的动态图工具Eager怎么用?这是一篇极简教程

  选自Github   作者:Madalina Buzau   机器之心编译   参与:王淑婷、泽南      去年 11 月,Google Brain 团队发布了 Eager Execution,一个由运行定义的新接口,为 TensorFl...

机器之心
2018/06/14
0
0
利用Tensorboard辅助模型调参

Image source from unsplash by Timothy L Brock 上一篇文章介绍了如何在 Keras 中调用 Tensorboard。这篇文章就来谈谈如何用 Tensorboard 帮助模型调参。 代码repo见这里 https://github.c...

Hongtao洪滔
06/19
0
0
Tensorflow入门——卷积神经网络MNIST手写数字识别

Image source: unsplash.com by Paweł Czerwiński 之前的文章我们介绍了如何用单层和多的 全连接层神经网络识别手写数字,虽然识别率能够达到98%,但是由于全链接神经网络本身的局限性,其...

Hongtao洪滔
04/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

iptables删除命令中的相关问题

最近在做一个中间件的配置工作,在配置iptables的时候,当用户想删除EIP(即释放当前连接),发现使用iptables的相关命令会提示错误。iptables: Bad rule (does a matching rule exist in t...

xiangyunyan
41分钟前
2
0
IT兄弟连 HTML5教程 HTML5表单 新增的表单属性1

HTML5 Input表单为<form>和<input>标签添加了几个新属性,属性如表1。 1 autocomplete属性 autocomplete属性规定form或input域应该拥有自动完成功能,当用户在自动完成域中开始输入时,浏览器...

老码农的一亩三分地
今天
7
0
OSChina 周五乱弹 —— 葛优理论+1

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享米津玄師的单曲《LOSER》: mv中的舞蹈诡异却又美丽,如此随性怕是难再跳出第二次…… 《LOSER》-...

小小编辑
今天
1K
20
nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部