xml地图|网站地图|网站标签 [设为首页] [加入收藏]

智能家电

当前位置:美高梅游戏网站 > 智能家电 > 美高梅棋牌AI学习笔记3 —— TensorFlow

美高梅棋牌AI学习笔记3 —— TensorFlow

来源:http://www.gd-chuangmei.com 作者:美高梅游戏网站 时间:2019-09-06 02:22

2017-02-03@erixhao技术极客TechBooster

Helloworld:

美高梅棋牌 1

import tensorflow as tf

#定义常量并打印
node1 = tf.constant(3.0, dtype=tf.float32) 
node2 = tf.constant(4.0) # also tf.float32 implicitly
sess = tf.Session()
print(sess.run([node1, node2]))

#加法
node3 = tf.add(node1, node2)
print "node3:", node3
print "sess.run(node3):", sess.run(node3)

# Log
# [3.0, 4.0]
# node3: Tensor("Add:0", shape=TensorShape([]), dtype=float32)
# sess.run(node3): 7.0

#操作变量
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
adder_node = a + b  # + provides a shortcut for tf.add(a, b)

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

# 7.5
# [ 3.  7.]

#公式运算
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=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]})

# [ 0.  0.30000001  0.60000002  0.90000004]

# 计算方差
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]}))

# 23.66

#修改变量
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]}))

# 0.0

# 训练
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

x_train = [1, 2, 3, 4]
y_train = [0, -1, -2, -3]

for i in range(1000):
    sess.run(train, {x: x_train, y: y_train})
print(sess.run([W, b,loss],{x: x_train, y: y_train}))

# [array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32), 5.6999738e-11]

AI(Artificial Intelligence)人工智能及机器学习(Machine Learning)最近大热,Google - Deep Mind的AlphaGo踢馆人类所向披靡,最终宣布正式进入智能时代1.0。我们今天也来体验学习一下Google的人工智能项目。

训练一下下,用线性回归:

1. Jeff Dean

import tensorflow as tf
# NumPy is often used to load, manipulate and preprocess data.
import numpy as np

# Declare list of features. We only have one numeric feature. There are many
# other types of columns that are more complicated and useful.
feature_columns = [tf.feature_column.numeric_column("x", shape=[1])]

# An estimator is the front end to invoke training (fitting) and evaluation
# (inference). There are many predefined types like linear regression,
# linear classification, and many neural network classifiers and regressors.
# The following code provides an estimator that does linear regression.
estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns)

# TensorFlow provides many helper methods to read and set up data sets.
# Here we use two data sets: one for training and one for evaluation
# We have to tell the function how many batches
# of data (num_epochs) we want and how big each batch should be.
x_train = np.array([1., 2., 3., 4.])
y_train = np.array([0., -1., -2., -3.])
x_eval = np.array([2., 5., 8., 1.])
y_eval = np.array([-1.01, -4.1, -7, 0.])
input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_train}, y_train, batch_size=4, num_epochs=None, shuffle=True)
train_input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_train}, y_train, batch_size=4, num_epochs=1000, shuffle=False)
eval_input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_eval}, y_eval, batch_size=4, num_epochs=1000, shuffle=False)

# We can invoke 1000 training steps by invoking the  method and passing the
# training data set.
estimator.train(input_fn=input_fn, steps=1000)

# Here we evaluate how well our model did.
train_metrics = estimator.evaluate(input_fn=train_input_fn)
eval_metrics = estimator.evaluate(input_fn=eval_input_fn)
print("train metrics: %r"% train_metrics)
print("eval metrics: %r"% eval_metrics)

# train metrics: {'average_loss': 1.7029566e-06, 'global_step': 1000, 'loss': 6.8118266e-06}
# eval metrics: {'average_loss': 0.0026467575, 'global_step': 1000, 'loss': 0.01058703}

老传统,我们先来看看这位Google TensoFlow的主要负责人,在加州山景城除了拉里佩奇Larry Page和布林Sergey Brin,Google数一数二,被用来打造下一代Google核心大脑的(Google Brain)的头号人物Jeff Dean。

自定义estimator:

美高梅棋牌 2

import numpy as np
import tensorflow as tf

# Declare list of features, we only have one real-valued feature
def model_fn(features, labels, mode):
  # Build a linear model and predict values
  W = tf.get_variable("W", [1], dtype=tf.float64)
  b = tf.get_variable("b", [1], dtype=tf.float64)
  y = W * features['x'] + b
  # Loss sub-graph
  loss = tf.reduce_sum(tf.square(y - labels))
  # Training sub-graph
  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))
  # EstimatorSpec connects subgraphs we built to the
  # appropriate functionality.
  return tf.estimator.EstimatorSpec(
      mode=mode,
      predictions=y,
      loss=loss,
      train_op=train)

estimator = tf.estimator.Estimator(model_fn=model_fn)
# define our data sets
x_train = np.array([1., 2., 3., 4.])
y_train = np.array([0., -1., -2., -3.])
x_eval = np.array([2., 5., 8., 1.])
y_eval = np.array([-1.01, -4.1, -7, 0.])
input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_train}, y_train, batch_size=4, num_epochs=None, shuffle=True)
train_input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_train}, y_train, batch_size=4, num_epochs=1000, shuffle=False)
eval_input_fn = tf.estimator.inputs.numpy_input_fn(
    {"x": x_eval}, y_eval, batch_size=4, num_epochs=1000, shuffle=False)

# train
estimator.train(input_fn=input_fn, steps=1000)
# Here we evaluate how well our model did.
train_metrics = estimator.evaluate(input_fn=train_input_fn)
eval_metrics = estimator.evaluate(input_fn=eval_input_fn)
print("train metrics: %r"% train_metrics)
print("eval metrics: %r"% eval_metrics)

列一下大神的大作,颤抖一下吧:

Google MapReduce

Google BigTable

Google Spanner

Google AdSense

Google Translate

Google Brain

LevelDB

TensorFlow

够重量级了吧,说其影响了第三代互联网及第四代也不夸张,开启了互联网大数据及人工智能时代。

Jeff Dean于2009年当选美国工程院院士。

2. Artificial Neural Networks, ANNs

在开始介绍TensorFlow之前我们先看一个TensorFlow的Online Playground,在线神经网络(Artificial Neural Networks,ANNs)!

美高梅棋牌 3

神经网络主要模仿动物神经网络,进行分布式并行算法的数学模型。

神经网络最大的魔力,在于不需要用各种特征用来输入给机器学习系统,如上图事例,只需要输入最基本的x1, x2, 只要给予足够多层的神经网络和神经元,神经网络会自己组合出最有用的特征。

美高梅棋牌 4

总体来说,神将网络需要大量神经元及:

每个神经元可以通过输出/激励函数(Activation Function)来计算来自其它相邻神经元的加权输入值

计算模型可以依靠大量数据训练

成本函数(Cost Function):定量评估对于给定输入值的输出结果离正确值的偏移,用于评估计算的精准

学习算法(Learning Algorithm):根据Cost Function的结果,自学,纠错

有了上述的核心,就有点智能感觉了,可以计算评估,并且可以递归自我学习。

3. TensorFlow Overview

TensorFlow是Google研发的第二代人工智能学习系统。官网描述,TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点在图中表示数学操作,图中的线则表示在节点间相互联系的多维数据数组,即张量。

美高梅棋牌 5

Tensor即张量,N维数组,Flow代表基于数据流图的计算,TensorFlow的计算就是张量从图的一端流动到另一端的并行计算。

张量:

美高梅棋牌 6

TensorFlow架构灵活,可做到多平台并行计算,如台式机,服务器,云端,移动设备等,同时又可以充分发挥多核CPU或者GPU的强大并行计算能力。

CPU v.s. GPU

科普一下CPU与GPU的差别吧,为什么GPU会在深度学习时代又火了起来。

设计架构:

美高梅棋牌 7

可以看出CPU的设计目标是处理不同数据类型,支持大量逻辑判断,分之跳转及中断处理;而GPU则诞生于目标处理大量图形图像,即大规模类型统一,相互依赖的数据,同时不需要被打断的纯计算环境,所以在架构设计上,GPU采用了数量众多的计算单元和超长流水线,仅保留简单控制逻辑,甚至省去了Cache。

所以,GPU天生具备大规模精良并发计算能力,而CPU的计算能力则只是很小一部分。大多数台式机甚至包括服务器,其CPU多核也没有超过2位数,每个核也包含了大量缓存及逻辑运算单元;GPU则称之为重核,如512核甚至上千之多。CPU被称之为Latency Oriented Cores, 而GPU则称之为Throughput Oriented Cores。

美高梅棋牌 8

所以,不难看出为什么在深度学习领域,GPU为何能炙手可热,GPU最适合:

计算密集型程序(Compute-Intensive),其大部分时间花在寄存器,几乎没有延时,而内存及SSD的延时则不可同日而语(达上百倍,千倍差异)

并行计算程序,上百核同时做同样事情

有了上述的铺垫,不能看出对于Tensor张量的计算处理,GPU简直是张量计算的天堂。

TensorFlow特征

TensorFlow并不是一个严格的神经网络,只要你可以抽象为数据流图,便可以使用TensorFlow来构建计算。

TensorFlow用C++来编写,目前版本提供的API相对低阶,确实是C/C++风格,任君打造。当然也提供暴露了深度学习中流行的Python接口,及其它Google自己的Go, Java, Lua, Javascript, R等。

开源神器

Goolge近年来突然意识到开源的威力,赶紧跟上。

官网当然是官言,其实在这个互联网,深度学习时代,除了秀肌肉,研发产品,占领市场,最重要的是占领程序员,程序员是未来世界的缔造者,通过开源直接输出核心思想到程序员大脑,甚至让程序员反向输入。

4. 机器学习之-MNIST

接下来正式展开TensorFlow的介绍,注意,其中涉及大量数学,请自行脑补。

简单来说,机器学习即通过经验自动改进的算法程序。

MNIST

美高梅棋牌 9

MNIST则为机器学习领域的一个经典问题,解决28*28像素的灰度手写数字图片识别,数字范围0-9,即人类的3-4岁左右水平,别小看。

人类的视觉系统是一大奇迹,我们可以毫秒级别轻易识别上述手写数字为5041,而我们的大脑则通过视觉皮层V1的包含1.4亿个神经元及与其他视觉皮层V2,V3,V4,V5构成数百亿神经元网络

  • 超级计算机。

所谓学习,必然有学习的教程,官网提供了大概6万多训练图片,5千图片用语迭代验证及另外1万图片用语最终测试。

MNIST的数据集可以从官网下载Yann LeCun's website, 此人目前就职于Facebook。

Softmax Regression模型

数字如何和向量挂钩?又如何TensorFlow?

美高梅棋牌 10

显然,对于上述28*28像素的图片,我们可以用数组表示,展成向量即, 28*28=784。

整个算法我们把MNIST分成两个数据集,图片训练数据集xs,每个图片对应标签ys

所以在MNIST训练集xs中,张量为[60000, 784],第一个维度索引图片6w张训练图片,第二个维度则索引像素点28*28,在此张量的每个元素都表示某个像素的强度介于0-1之间:

美高梅棋牌 11

而其对应的标签ys数据集是介于0-9的数字,为了简化这里使用了“one-hot vectors”。

one-hot即只有一位编码有效,如使用n位状态寄存器来对n个状态编码,任意时候只有其中一位有效。

在MNIST标签数据集中,我们用10维向量来表示某0-9的数字,如数字n表示只有在第n维为数字1,其余维度都是0,如数字0,表示为:

[1,0,0,0,0,0,0,0,0,0]。

⚠️ : 官网貌似写成11维,多了个0,所以众多copy模式也copyright。

这样,MNIST数据集标签组成一个[60000,10]的数字矩阵。

美高梅棋牌 12

好了,有了上述的数据结构抽象,接下来整体算法就是要得出给定图片代表每个数字的概率,如模型推算一张包含9的图片代表数字9的概率为80%,而判断它代表数字8的概率为5%,给予其他数字更小概率值。

Softmax模型可以用来给不同对象分配概率,通常分为两步:

对图片像素值进行加权求和,如果这个像素具有很强证据证明这张图片不属于该类,则权值为负数,相反则为正数。

美高梅棋牌 13

上图红色表示正,蓝色表示负数。

偏置量,用于排除干扰

则图片x代表数字i的evidence表示为:

美高梅棋牌 14

其中,wi为权重,bi为i的偏置量,j 代表给定图片 x 的像素索引用于像素求和。然后用softmax函数可以把这些证据转换成概率 y:

美高梅棋牌 15

概率论登场,把softmax转换为, normalize的概率值,

美高梅棋牌 16

本文由美高梅游戏网站发布于智能家电,转载请注明出处:美高梅棋牌AI学习笔记3 —— TensorFlow

关键词: