Tensorflow学习日志与心得(一)
最近开始着手于神经网络的学习,查阅了相关资料使用Tensorflow为构建的主流,现在开始从基础部分开始学习,一起进行交流
1.概述
Tensorflow是一个编程系统,使用图(graphs)来表示计算任务,图(graphs)中的节点称之为op(operation),一个op获得0个或多个Tensor,执行计算,产生0个或多个Tensor。Tensor 看作是一个n 维的数组或列表。图必须在会话(Session)里被启动。
Tensor—数据
Session—会话 所有计算都要在会话中进行
graphs—图
operation—节点 进行加减乘除等运算的节点
2.Tensorflow基本操作
2.1常用函数
以下只列出了在学习中经常使用的函数,完整版可查看http://blog.csdn.net/lenbow/article/details/52152766
https://www.w3cschool.cn/tensorflow_python/tensorflow_python-36hu2mm9.html
操作 | 描述 |
---|---|
tf.add(x, y, name=None) | 求和 |
tf.sub(x, y, name=None) | 减法 |
tf.mul(x, y, name=None) | 乘法 |
tf.div(x, y, name=None) | 除法 |
tf.mod(x, y, name=None) | 取模 |
tf.square(x, name=None) | 计算平方 (y = x * x = x^2). |
tf.sqrt(x, name=None) | 开平方根 |
tf.reduce_mean(input_tensor,axis=None,keep_dims=False,name=None,reduction_indices=None) | 求平均值 |
tf.matmul(a,b,transpose_a=False,transpose_b=False,a_is_sparse=False, b_is_sparse=False,name=None) | 矩阵相乘 |
tf.constant() | 定义常量 |
tf.Variable() | 定义变量 |
with tf.Session() as sess: | 定义会话结束后自动关闭 |
init = tf.global_variables_initializer() | 全局变量初始化 |
tf.assign(a, b) | 赋值 将b的值赋给a |
sess.run(title) | 执行会话 |
tf.placeholder(dtype,shape=None,name=None) | 为一个tensor插入一个占位符 |
2.2基础操作
1)创建会话
import tensorflow as tf #加入“头文件”
c1 = tf.constant([[3,3]]) #创建一行两列的矩阵
c2 = tf.constant([[3],[2]]) #创建两行一列的矩阵
product = tf.matmul(c1 , c2) #进行矩阵乘法运算
with tf.Session() as sess: #创建会话 Session(S要大写)
reslut = sess.run(product) #输出运算结果
print(reslut)
[[15]]
2)变量操作
import tensorflow as tf #加入“头文件”
x = tf.Variable([1,2]) #创建变量x
c = tf.constant([3,3]) #创建常量c
sub = tf.subtract(x,c) #进行减法操作
add = tf.add(x,c) #进行加法操作
init = tf.global_variables_initializer() #变量必须初始化 全局变量初始化
with tf.Session() as sess: #创建session并创建默认图
sess.run(init)
print(sess.run(sub))
print(sess.run(add))
[-2 -1]
[4 5]
#变量自加一
state = tf.Variable(0,name='counter') #创建初始值为0的变量
new_value = tf.add(state,1) #给state加1
update = tf.assign(state , new_value) #将new_value的值赋给state
init = tf.global_variables_initializer() #全局变量初始化
with tf.Session() as sess:
sess.run(init)
print(sess.run(state))
for _ in range(5): #循环5次加1的操作
print(sess.run(update))
print(sess.run(state))
0
1
2
3
4
5
3)Feed操作
c1 = tf.placeholder(tf.float32) #创建32位浮点型占位符(在执行时需要为其提供数据data)
c2 = tf.placeholder(tf.float32)
add = tf.add(c1,c2) #相加
with tf.Session() as sess:
print(sess.run(add,feed_dict={c1:[2],c2:[22]})) #在最终执行时给c1 c2赋值
[24.]
4)梯度下降拟合曲线
import numpy as np
import tensorflow as tf
x_data = np.random.rand(100)
y_data = .1 * x_data +.2
#构建线性模型优化器 优化y=kx+b
#待优化的参数
b = tf.Variable(0.) #变量
k = tf.Variable(0.)
y = k * x_data + b
#构建二次代价函数
loss = tf.reduce_mean(tf.square(y_data - y)) #二者相差平方的均值
optimizer = tf.train.GradientDescentOptimizer(0.2) #梯度下降优化器
train = optimizer.minimize(loss) #训练使代价函数最小
init = tf.global_variables_initializer() #初始化
with tf.Session() as sess:
sess.run(init)
for step in range(200): #迭代200次
sess.run(train)
if step%20==0: #每20次打印一次
print(step,'[k,b]:',sess.run([k,b]))
0 [k,b]: [0.050436843, 0.099178314]
20 [k,b]: [0.10087012, 0.19955701]
40 [k,b]: [0.10054425, 0.19972299]
60 [k,b]: [0.1003404, 0.19982675]
80 [k,b]: [0.10021292, 0.19989164]
100 [k,b]: [0.10013317, 0.19993222]
120 [k,b]: [0.10008328, 0.19995761]
140 [k,b]: [0.10005209, 0.19997348]
160 [k,b]: [0.10003257, 0.19998342]
180 [k,b]: [0.10002038, 0.19998963]
本次都是一些基础操作,也是本人第一次制作博客,主要用作自身学习,如有错误的地方还望大神指点!