机器学习-tensorflow入门教程一——基础内容
2017-09-10 22:37
519 查看
Tensorflow中每个操作符当做一个节点,连接节点的线称为边,边中流动的数据称为tensor。有一类特殊的边中没有数据流动,这种边称为是依赖控制,作用是让起始节点执行完后在执行目标节点,可以进行灵活的条件控制。
运算核(kernal)是指一个运算操作在某个具体硬件(比如CPU或GPU中)的实现。
Tensorflow内建的操作运算有如下:
1、设置定量
使用tf.constant可以创建定量,但是必须使用session才能显示定量的数据,session封装了tensorflow的控制以及状态,调用run方法,可以得到constant的值。
2、tf的操作符,加法
3、placeholder类型量
placeholder相对与constant型,可以接受外部输入,改变自身的数值。
node1与node2 为创建的两个可以就收外部输入的量,可以通过字典传入数据。
可以使用连续运算操作符,并且字典可以通过列表形式传入多个数据。
placeholder用于提供输入数据,在定义时,数据类型是需要指定的,但是维度信息可以不用·给定,如果不确定可以用None代替。
4、variable类型
在机器学习中,我们需要在训练过程中调整参数,这种可在训练过程中调整的数据类型为variable类型。可以通过一个初始值与数据类型进行声明。
与constant类型(在声明时就初始化)不同,variable类型变量需要调用如下代码进行初始化:
tf.Variable的作用就是保存和更新神经网络中的参数。初始值可以设置为随机数。如下方式
Tensorflow随机数生成函数
Tensorflow生成常数函数
Tensorflow也支持通过其他变量的初始值来初始化新的变量,如下所示
w2使用w1的初始值进行初始化
如果变量声明时,参数trainable为True,那么这个变量会被加入GraphKeys.TRANINABLE_VARIABLES集合中。在Tensorflow中可以通过
5、loss function 误差计算
y为理想输出,line_regress为实际计算输出。loss为误差平方和。
6、variable类型变量的改变
使用了如下代码,对variable类型量进行了重新赋值:
维度是变量的一个重要属性,但是维度能够在程序运行中进行改变,但是需要设置参数validate_shape=False
7、训练
简单的使用梯度下降法,确定上述线性回归的参数值。
8、线性回归例程
WALDM
运算核(kernal)是指一个运算操作在某个具体硬件(比如CPU或GPU中)的实现。
Tensorflow内建的操作运算有如下:
类型 | 实例 |
---|---|
标量运算 | Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal |
向量运算 | Concat、Slice、Split、Constant、Rank、Shape、Shuffle |
矩阵运算 | MatMul、MatrixInverse、MatrixDeterminant |
带状态的运算 | Variable、Assign、AssignAdd |
神经网络组件 | SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling |
储存、恢复 | Save、Restore |
队列及同步运算 | Enqueue、Dequeue、MutexAcquire、MutexRelease |
控制流 | Merge、Switch、Enter、Leave、NextIteration |
import tensorflow as tf node1 = tf.constant(3.0,dtype = tf.float32) node2 = tf.constant([2.3],dtype = tf.float32) sess = tf.Session() print(sess.run([node1,node2]))
使用tf.constant可以创建定量,但是必须使用session才能显示定量的数据,session封装了tensorflow的控制以及状态,调用run方法,可以得到constant的值。
2、tf的操作符,加法
import tensorflow as tf node1 = tf.constant(3.0,dtype = tf.float32) node2 = tf.constant([2.3],dtype = tf.float32) node3 = tf.add(node1,node2) sess = tf.Session() print(sess.run(node3))
3、placeholder类型量
placeholder相对与constant型,可以接受外部输入,改变自身的数值。
import tensorflow as tf node1 = tf.placeholder(tf.float32) node2 = tf.placeholder(tf.float32) node3 = node1 + node2 sess = tf.Session() print(sess.run(node3,{node1:3,node2:4}))
node1与node2 为创建的两个可以就收外部输入的量,可以通过字典传入数据。
import tensorflow as tf node1 = tf.placeholder(tf.float32) node2 = tf.placeholder(tf.float32) node3 = node1 + node2 node4 = node3 * 2 sess = tf.Session() print(sess.run(node4,{node1:[3,4],node2:[4,5]}))
可以使用连续运算操作符,并且字典可以通过列表形式传入多个数据。
placeholder用于提供输入数据,在定义时,数据类型是需要指定的,但是维度信息可以不用·给定,如果不确定可以用None代替。
x = tf.placeholder(tf.float32,shape=(None,2),name = 'x-input')
4、variable类型
在机器学习中,我们需要在训练过程中调整参数,这种可在训练过程中调整的数据类型为variable类型。可以通过一个初始值与数据类型进行声明。
import tensorflow as tf weight = tf.Variable(3,dtype = tf.float32) bias = tf.Variable(1,dtype = tf.float32) x = tf.placeholder(tf.float32) y = weight * x + bias init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) print(sess.run(y,{x:3}))
与constant类型(在声明时就初始化)不同,variable类型变量需要调用如下代码进行初始化:
init = tf.global_variables_initializer() sess.run(init)
tf.Variable的作用就是保存和更新神经网络中的参数。初始值可以设置为随机数。如下方式
import tensorflow as tf w1 = tf.Variable(tf.random_normal([2,3],stddev=1,mean=1,seed=1,dtype=tf.float32)) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(w1))
Tensorflow随机数生成函数
函数名称 | 随机数分布 | 主要参数 |
---|---|---|
tf.random_normal | 正态分布 | 平均值,标准差,取值类型 |
tf.truncated_normal | 正态分布,但如果随机出来的值偏离平均值超过2个标准差,那么这个数将会被重新生成 |
函数名称 | 功能 | 样例 |
---|---|---|
tf.zeros | 生成全0的数组 | tf.zeros([2,3],int32)->[[0,0,0],[0,0,0]] |
tf.ones | 生成全1的数组 | tf.ones([2,3],int32)->[[1,1,1],[1,1,1]] |
tf.fill | 产生一个全部为给定数字的数组 | tf.fill([2,3],9)->[[9,9,9],[9,9,9]] |
tf.constant | 产生一个给定值的常量 | tf.constant([2,3])->[2,3] |
import tensorflow as tf w1 = tf.Variable(tf.random_normal([2,3],stddev=1,mean=1,seed=1,dtype=tf.float32)) w2 = tf.Variable(w1.initialized_value())
w2使用w1的初始值进行初始化
如果变量声明时,参数trainable为True,那么这个变量会被加入GraphKeys.TRANINABLE_VARIABLES集合中。在Tensorflow中可以通过
tf.trainable_variables()函数得到所有需要优化的参数。Tensorflow中提供的神经网络优化算法将会GraphKeys.TRANINABLE_VARIABLES集合中的变量当做默认的优化对象。
5、loss function 误差计算
import tensorflow as tf weight = tf.Variable(3,dtype = tf.float32) bias = tf.Variable(1,dtype = tf.float32) x = tf.placeholder(tf.float32) line_regress = weight * x + bias y = tf.placeholder(tf.float32) init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) squared_deltas = tf.square(line_regress - y) loss = tf.reduce_sum(squared_deltas) print(sess.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]}))
y为理想输出,line_regress为实际计算输出。loss为误差平方和。
6、variable类型变量的改变
import tensorflow as tf weight = tf.Variable(3,dtype = tf.float32) bias = tf.Variable(1,dtype = tf.float32) x = tf.placeholder(tf.float32) line_regress = weight * x + bias y = tf.placeholder(tf.float32) init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) squared_deltas = tf.square(line_regress - y) loss = tf.reduce_sum(squared_deltas) fixW = tf.assign(weight, -1.) fixb = tf.assign(bias, 1.) sess.run([fixW, fixb]) print(sess.run(loss,{x:[1,2,3,4],y:[0,-1,-2,-3]}))
使用了如下代码,对variable类型量进行了重新赋值:
fixW = tf.assign(weight, -1.) fixb = tf.assign(bias, 1.) sess.run([fixW, fixb])
维度是变量的一个重要属性,但是维度能够在程序运行中进行改变,但是需要设置参数validate_shape=False
fixW = tf.assign(w1,w2,validate_shape = False)
7、训练
简单的使用梯度下降法,确定上述线性回归的参数值。
import tensorflow as tf weight = tf.Variable(1,dtype = tf.float32) bias = tf.Variable(-1,dtype = tf.float32) x = tf.placeholder(tf.float32) line_regress = weight * x + bias y = tf.placeholder(tf.float32) init = tf.global_variables_initializer() sess = tf.Session() squared_deltas = tf.square(line_regress - y) loss = tf.reduce_sum(squared_deltas) optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss) sess.run(init) for i in range(1000): sess.run(train,{x:[1,2,3,4],y:[0,-1,-2,-3]}) if i % 10 == 0: print(i,sess.run([weight,bias,loss],{x:[1,2,3,4],y:[0,-1,-2,-3]}))
8、线性回归例程
import numpy as np import tensorflow as tf ##声明特征列表 feature_columns = [tf.feature_column.numeric_column("x",shape=[1])] ##创建线性回归,还有线性分类,神经网络分类等 estimator = tf.estimator.LinearRegressor(feature_columns = feature_columns) ##创建训练数据 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) ##训练 estimator.train(input_fn=input_fn,steps=1000) train_metrics = estimator.evaluate(input_fn=train_input_fn) eval_metrics = estimator.evaluate(input_fn=eval_input_fn) eval_pre = estimator.predict(input_fn= eval_input_fn) print("train metrics: %r"%train_metrics) print('eval metrics: %r'%eval_metrics) for i in eval_pre: print('predict: ',i)
WALDM
相关文章推荐
- Python学习入门基础教程(learning Python)--3.3.2 Python的关系运算
- C++入门之基础语法学习教程
- 45、Docker 加 tensorflow的机器学习入门初步
- Python学习入门基础教程(learning Python)--1.2.4 Python格式化输出科学计数 .
- Python基础入门教程,Python学习路线图
- ASP.NET 学习历程 - 清清月儿 .NET万花筒 Asp.net技术 Asp.net教程 Asp.net源码 Asp.net基础 Asp.net控件 Asp.net入门 - CSDNBlog
- WPF入门教程系列一——基础 一、 前言 最近在学习WPF,学习WPF首先上的是微软的MSDN,然后再搜索了一下网络有关WPF的学习资料。为了温故而知新把学习过程记录下来,以备后
- MySql入门教程mysql基础知识学习实例讲解
- Matlab 和 Simulink 教程学习基础入门
- Swift编程语言教程-001入门学习基础
- 【maven学习笔记】maven基础入门学习中文教程
- Echarts学习2_Echarts入门(零基础小白教程)
- Java基础学习总结(25)——Log4j快速入门教程
- Python学习入门基础教程(learning Python)--1.3 Python数据输入 .
- TensorFlow入门深度学习--01.基础知识
- Python基础入门教程,Python学习路线图
- Python学习入门基础教程(learning Python)--5.2 Python读文件基础
- tensorflow学习笔记二:入门基础
- 基础学习教程:Java Annotation入门
- Java基础学习总结(25)——Log4j快速入门教程