TensorFlow基本概念
来源:互联网 发布:c语言1.0f 编辑:程序博客网 时间:2024/05/16 01:24
tensorflow 提供两个层次的API,底层的TensorFlow Core提供完整的控制,适用于研究者。高层的使用起来则更简单,如tf.contrib.learn,但是contrib仍在更新中
TensorFlow Core层的操作
TensorFlow中的数据单元都是用tensor表示,tensor的rank代表它的维度
- 使用时首先需要import
import tensorflow as tf
- Computational Graph
computational graph 是将一系列TensorFlow操作放入一张图中
TensorFlow的程序可以看做创建 computational graph和运行 computational graph两部分
图中的节点可以输入0个或者多个tensor,输出1个tensor。
节点可以是操作,也可以是tensor,常量型节点没有输入,输出它所存储的值
node1 = tf.constant(3.0, tf.float32)node2 = tf.constant(4.0)
运行computational graph时需要创建一个session
sess = tf.Session()a, b = sess.run([node1, node2])
之后可以创建一个操作型的节点
node3 = tf.add(node1, node2)sess.run(node3)
computational graph也可以接收外部的输入
定义placeholders
a = tf.placeholder(tf.float32)b = tf.placeholder(tf.float32)adder_node = a + bsess.run(adder_node, {a: [1,3], b: [3,5]})add_and_triple = adder_node * 3sess.run(add_and_triple, {a: 3, b: 5})
graph中利用Variables来调节参数
W = tf.Variable([.3], tf.float32)b = tf.Varialbe([-.3], tf.float32)x = tf.placeholder(tf.float32)linear_model = W * x + b
在使用时首先要对变量初始化
init = tf.global_variables_initializer()sess.run(init)
y = tf.placeholder(tf.float32)squared_deltas = tf.square(linear_model - y)loss = tf.reduce_sum(squared_deltas)
更改变量的值,需要用tf.assign
fixW = tf.assign(W, [-1])fixb = tf.assign(b, [1])sess.run([fixW, fixb])
训练与优化 tf.train API
optimizer = tf.train.GradientDescentOptimizer(0.01)train = optimizer.minimize(loss)for i in range(1000): sess.run(train, {x: [1,2,3,4], u: [0, -1, -2, -3]})
tf.contrib.learn的操作
tf.contrib.learn主要可以在以下四个方面简化机器学习的过程:
running training loops.
running evaluation loops
managing data sets
managing feeding
首先定义features
features = [tf.contrib.layers.real_valued_column("x", dimension = 1)]
dimension指特征的维度
定义estimator
TF中有许多定义好的模型,如linear regression,logistic regression, linear classification, logistic classification, neural network 等
estimator = tf.contrib.learn.LinearRegressor(feature_columns=features)
estimator = tf.contrib.learn.DNNClassifier(feature_columns=feature, hidden_units=[10, 20, 10], n_classes=3, model_dir="./temp"
注意,模型的训练结果会被保存下来,下次运行程序时自动从上次的结果处开始
定义训练数据
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)
训练与评估
estimator.fit(input_fn = input_fn, steps = 1000)estimator.evaluate(input_fn = input_fn)
自定义模型
之前所使用的tf.contrib.learn.LinearRegressor实际上是tf.contrib.learn.Estimator的一个子类,Estimatior中也有一个函数model_fn来告诉tf.contrib.learn如何评估预测,训练步长,代价。
import numpy as npimport tensorflow as tfdef model(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 #get global step variable in the 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)) return tf.contrib.learn.ModelFnOps( mode=mode, predictions=y, loss=loss, train_op=train)estimator = tf.contrib.learn.Estimator(model_fn = model)#define our data setx = np.array([1., 2., 3., 4.])y = np.array([0., -1., -2., -3.])#change numpy format to input_fn formatinput_fn = tf.contrib.learn.io.numpy_input_fn({"x": x}, y, 4, num_epochs=1000)#trainestimator.fit(input_fn=input_fn, steps=1000)#evaluateprint estimator.evaluate(input_fn=input_fn, steps=10)
class tf.contrib.learn.Estimator
Estimator(model_fn=None, model_dir=None, config=None, params=None, feature_engineering_fn=None)
1. model_fn :模型函数
参数:
features: 一个Tensor或者Tensors构成的字典,根据传递给fit的数据
labels: 一个Tensor或者Tensors构成的字典。如果模型是ModeKeys.INFER,则传递labels=None。如果model_fn的签名不接受mode,则model_fn仍可以用labels=None
mode:可选项。指定模型是training,evaluation还是prediction
params: 可选项。接收传递给Estimator的params参数,可以用来调整超参数
config: 可选项。接收传递给Estimator的config参数,或者是默认的config。可以用来更改一些配置,如num_ps_replices
model_dir: 可选项,指定模型参数,图或者其他存储的位置。接收传递给Estimator的model_dir参数,或者是默认的model_dir。
返回值
返回ModelFnOps
2. model_dir:
指定模型参数,图或者其他存储的位置
3. config:
配置
4. params:
传递给model_fn的一些超参数字典,keys是参数的名字,值则是基本的python类型
5. feature_engineering_fn
input_fn的输出的features和labels,返回传递给model_fn的features和labels。
fit(*args, **kwargs)
evaluate(*args, **kwargs)
predict(*args, **kwargs)
注意:tf.get_variable()与tf.Variable()都可以定义变量
import tensorflow as tftf.Variable(initial_value=None, trainable=True, collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None)tf.get_variable(name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, custom_getter=None)
两者的区别在于使用tf.Variable时,如果检测到命名冲突,系统会自己处理。
因此,当我们需要共享变量时,需要使用tf.get_variable()
另外,variable()使用时必须要指定变量的值
- tensorflow 基本概念
- TensorFlow基本概念
- TensorFlow基本概念
- TensorFlow基本概念
- TensorFlow基本概念
- Tensorflow基本概念
- tensorflow基本概念
- TensorFlow学习1--TensorFlow基本概念
- 谷歌tensorflow基本概念
- TensorFlow 基本概念和用法
- Tensorflow基本概念理解示例
- TensorFlow的一些基本概念
- 第一课 Tensorflow基本概念
- Tensorflow环境搭建&基本概念
- 新人上手TensorFlow之TensorFlow基本概念
- 【TensorFlow】TensorFlow第一课:安装与基本概念
- TensorFlow学习笔记:3、TensorFlow基本概念
- 【Tensorflow】Tensorflow一些常用基本概念与函数
- nginx 配置多站点
- 简单内存泄漏检测方法 解决 Detected memory leaks! 问题
- PAT-A1003
- 大型网站架构演变发展历程
- 操作系统动态库调用过程
- TensorFlow基本概念
- Linux下高并发socket最大连接数所受的各种限制
- 21.ArrayList内部类迭代器 + java 反射
- 分布式下的session处理方式
- 数据库中事务的四大特性(ACID),事务的隔离级别
- weex 集成记录
- ubuntu14.04配置caffe的python接口
- Matlab中使用FFT验证卷积定理
- Nginx负载均衡和LVS负载均衡的比较分析