tensorflow_基础 (上)

末蓝、 2022-03-09 19:58 290阅读 0赞

1.张量,计算图,会话

基于Tnesorflow的NN,用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型。

张量(tensor) :多维数组(列表) 阶:张量的维数;
维数:0-D / 1-D / 2-D /n-D
阶: 0 / 1 / 2 / n
名字:标量scalar / 向量vector / 矩阵matrix / 张量tensor
例子:s=123, / v=[1,2,3] / m=[[1,2,3],[4,5,6],[7,8,9]] / t=[[[…n个
张量可以表示0阶到n阶数组(列表)

  1. import tensorflow as tf
  2. a=tf.constant([1.0,2.0]) #定义常数
  3. b=tf.constant([3.0,4.0])
  4. result=a+b
  5. print (result)
  6. 显示Tensor("add:0",shape=(2,),dtype=float32)
  7. //节点名add,第0个输出; 维度shape,一维数组长度为2; 数据类型为float32

计算图(Graph):搭建神经网络的计算过程,只搭建,不运算。

y=XW=x1w1+x2w2

  1. import tensorflow as tf
  2. x=tf.constant([[1.0,2.0]])
  3. w=tf.constant([[3.0] , [4.0]])
  4. y=tf.matmul(x,w)
  5. print (y)
  6. 显示Tensor(*matmul:0*,shape(1,1),dtype=float32)

会话(Seesion):执行计算图中的节点运算。

  1. import tensorflow as tf
  2. x=tf.constant([[1.0,2.0]])
  3. y=tf.constant([[3.0],[4.0]])
  4. y=tf.matmul(x,w)
  5. print (y)
  6. with tf.Session() as sess:
  7. print sess.run(y)
  8. 结果:
  9. Tensor("MatMul_1:0", shape=(1, 1), dtype=float32)
  10. [[11.]]

参数:即权重 w ,用变量表示,随机给初值。

  1. w=tf.Variable(ts.random_normal([2,3], stddev=2, mean=0, seed= 1))
  2. //random_normal正态分布 ,产生2*3的矩阵,标准差为2,均值为0,随机种子为1
  3. //tf.truncated_normal() 去掉过大偏离点的正态分布,如果生成数据超过平均值两个标准差,则重新生成
  4. //tf.random_uniform() 平均分布。
  5. //tf.zeros 全0数组 tf.zeros([3,2],int32)生成[[0,0],[0,0],[0,0]]
  6. //tf.ones 全1数组 tf.ones([3,2],int32)生成[[1,1],[1,1],[1,1]]
  7. //tf.fill全定值数组 tf.fill([3,2],6)生成 [[6,6],[6,6],[6,6]]
  8. //tf.cnostant直接给值 tf.constant([3,2,1])生成[3,2,1]

神经网络实现过程:
1.准备数据集,提取特征,作为输入喂给神经网络
2.搭建NN结构,从输入到输出:(先搭建计算图,再用会话执行)
(NN前向传播算法===>计算输出)
3.大量特征数据喂给NN,迭代优化NN参数
(NN反向传播算法===>优化参数训练模型)
4.使用训练好的模型预测和分类。

前向传播:搭建模型,实现推理(以全连接网络为例)

变量初始化,计算图节点运算,都要用到会话(with结构实现)

  1. with.tf.Session() as sess:
  2. sess.run()

变量初始化:在sess.run()函数中用tf.global_variable_initalizer()

  1. init_op=tf.global_variable_initlizer()
  2. sess.run(init_op)

计算图节点运算:在sess.run函数中写入待运算的节点

  1. sess.run(y)

用tf.placeholder占位,在sess.run函数中用feed_dict喂数据:

  1. #喂一组数据:
  2. x=tf.placeholder(tf.float32,shape=(1,2)) #1维2特征
  3. sess.run(y,feed_dict={x:[[0.5,0.6]]})
  4. #喂多组数据:
  5. x=tf.placeholder(tf.float32,shape=(None,2)) #维数未知,2特征
  6. sess.run(y,feed_dict={x:[[0.1,0.2],[0.2,0.3],[0.3,0.4],[0.4,0.5]]})
  7. #coding:utf-8
  8. #两层简单的神经网络(全连接)
  9. import tensorflow as tf
  10. #定义输入和参数
  11. x=tf.constant([[0.7,0.5]])
  12. w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) #两行三列随机数矩阵,标准差为1
  13. w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
  14. #定义前向传播过程
  15. a=tf.matmul(x,w1)
  16. y=tf.matmul(a,w2)
  17. #用会话计算结果
  18. with tf.Seesion() as sess:
  19. init_op=tf.global_variables_initializer()
  20. sess.run(init_op)
  21. print (sess.run(y))
  22. ...结果为:
  23. [[3.0904665]]
  24. #coding:utf-8
  25. #两层简单的神经网络(全连接)
  26. import tensorflow as tf
  27. #定义输入和参数
  28. #用placeholder实现输入定义 (sess.run中为一组数据)
  29. x=tf.placeholder(tf.float32, shape=(1,2))
  30. w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
  31. w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
  32. #定义前向传播过程
  33. a=tf.matmul(x,w1)
  34. y=tf.matmul(a,w2)
  35. #用会话计算结果
  36. with.tf.Session() as sess:
  37. init_op=tf.global_variables_initializer()
  38. sess.run(init_op)
  39. print (sess.run(y, feed_dict={x: [[0.7,0.5]]}))
  40. 结果为:
  41. [[3.0904665]]
  42. #coding:utf-8
  43. #两层简单神经网络(全连接)
  44. import tensorflow as tf
  45. #定义输入和参数
  46. #用placeholder定义输入(sess.run喂多组数据)
  47. x=tf.placeholder(tf.float32, shape=(None,2))
  48. w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
  49. w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
  50. #定义前向传播过程
  51. a=tf.matmul(x,w1)
  52. y=tf.matmul(a,w2)
  53. #调用会话计算结果
  54. with tf.Session() as sess:
  55. init_op=tf.global_variables_initializer()
  56. sess.run(init_op)
  57. print (sess.run(y, feed_dict={x: [[0.7,0.5],[0.2,0.3],[0.3,0.4],[0.4,0.5]]} , sess.run(w1),sess.run(w2))

反向传播:训练模型参数,在所有参数上用梯度下降,使NN模型在训练数据上的损失函数最小。

损失函数(loss):预测值(y)与已知答案(y_)的差距

均方误差MSE: loss= tf.reduce_mean(tf.squaree(y_- y))

反向传播训练方法:以减小loss值为优化目标

  1. train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
  2. train_step=tf.train.MomentumOptimizer(learning_rate,momentum).minimize(loss)
  3. train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)

学习率:决定参数每次更新的幅度

  1. #coding:utf-8
  2. #导入模块,生成模拟数据集
  3. import tensorflow as tf
  4. import numpy as np
  5. BATCH_SIZE=8
  6. seed = 23455
  7. #基于seed产生随机数
  8. rng=np.random.RandomState(seed)
  9. #随机数返回32行2列的矩阵,表示32组数据,作为输入数据集
  10. X=rng.rand(32,2)
  11. #从X这个32行2列的矩阵中 取出一行,判断如果和小于1,给y赋值1,否则,赋值0
  12. #作为输入数据集的标签(正确答案)
  13. Y=[[int(x0 + x1 < 1)] for (x0, x1) in X]
  14. print (X)
  15. print (Y)
  16. #1定义神经网络的输入,参数和输出,定义前向传播过程。
  17. x=tf.placeholder(tf.float32, shape=(None, 2))
  18. y_=tf.placeholder(tf.float32,shape=(None,1))
  19. w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
  20. w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
  21. a = tf.matmul(x,w1)
  22. y = tf.matmul(a,w2)
  23. #2定义损失函数及反向传播方法。
  24. loss = tf.reduce_mean(tf.square(y_- y))
  25. #train_step= tf.train.GrandientDescentOptimizer(0.001).minimize(loss)
  26. train_step=tf.train.MomentumOptimizer(0.001,0.9).minimize(loss)
  27. #train_step=tf.train.AdamOptimizer(0.001).minimize(loss)
  28. #3生成会话,训练STEP轮
  29. with tf.Session() as sess:
  30. init_op = tf.global_variables_initializer()
  31. sess.run(init_op)
  32. print (sess.run(w1),sess.run(w2))
  33. print ("\n")
  34. #训练模型
  35. STEPS = 3000
  36. for i in range(STEPS):
  37. start = (i*BATCH_SIZE) %32
  38. end = start +BATCH_SIZE
  39. sess.run(train_step,feed_dict={x: X[start:end], y_: Y[start:end]})
  40. if i % 500 == 0 :
  41. total_loss = sess.run(loss, feed_dict={x: X, y_: Y})
  42. print (i, total_loss)
  43. print ("\n")
  44. print (sess.run(w1),sess.run(w2))
  45. 结果为:
  46. [[0.83494319 0.11482951]
  47. [0.66899751 0.46594987]
  48. [0.60181666 0.58838408]
  49. [0.31836656 0.20502072]
  50. [0.87043944 0.02679395]
  51. [0.41539811 0.43938369]
  52. [0.68635684 0.24833404]
  53. [0.97315228 0.68541849]
  54. [0.03081617 0.89479913]
  55. [0.24665715 0.28584862]
  56. [0.31375667 0.47718349]
  57. [0.56689254 0.77079148]
  58. [0.7321604 0.35828963]
  59. [0.15724842 0.94294584]
  60. [0.34933722 0.84634483]
  61. [0.50304053 0.81299619]
  62. [0.23869886 0.9895604 ]
  63. [0.4636501 0.32531094]
  64. [0.36510487 0.97365522]
  65. [0.73350238 0.83833013]
  66. [0.61810158 0.12580353]
  67. [0.59274817 0.18779828]
  68. [0.87150299 0.34679501]
  69. [0.25883219 0.50002932]
  70. [0.75690948 0.83429824]
  71. [0.29316649 0.05646578]
  72. [0.10409134 0.88235166]
  73. [0.06727785 0.57784761]
  74. [0.38492705 0.48384792]
  75. [0.69234428 0.19687348]
  76. [0.42783492 0.73416985]
  77. [0.09696069 0.04883936]]
  78. [[1], [0], [0], [1], [1], [1], [1], [0], [1], [1], [1], [0], [0], [0], [0], [0], [0], [1], [0], [0], [1], [1], [0], [1], [0], [1], [1], [1], [1], [1], [0], [1]]
  79. [[-0.8113182 1.4845988 0.06532937]
  80. [-2.4427042 0.0992484 0.5912243 ]] [[-0.8113182 ]
  81. [ 1.4845988 ]
  82. [ 0.06532937]]
  83. 0 5.1311817
  84. 500 0.3843913
  85. 1000 0.3835917
  86. 1500 0.3835619
  87. 2000 0.38356063
  88. 2500 0.38356057
  89. [[-0.61332554 0.8312484 0.07565959]
  90. [-2.2577715 -0.14481366 0.5678319 ]] [[-0.10432342]
  91. [ 0.77349013]
  92. [-0.04419039]]

搭建神经网络八股:准别,前传,反传,迭代
0 准备: import / 常量定义 / 生成数据集
1 前向传播: 定义输入,参数和输出 x=/y_=/ w1=/w2= /a=/y=
2 反向传播: 定义损失函数,反向传播方法 loss= / train_step=
3 生成会话,训练STEPS轮

  1. with tf.session() as sess
  2. init_op=tf.global_variables_initalizer()
  3. sess_run(init_op)
  4. STEPS=3000
  5. for i in range(STEPS):
  6. start=
  7. end=
  8. sess.run(train_step,feed_dict:)

发表评论

表情:
评论列表 (有 0 条评论,290人围观)

还没有评论,来说两句吧...

相关阅读

    相关 TensorFlow基础

    深度学习在模式识别方向,尤其是在图像、声音、语音、语言和时间序列数据上表现出色。运用深度学习,你可以对数据进行分类、预测、聚类以及特征提取。2015年11月,谷歌发布了Tens

    相关 TensorFlow基础概念

    首先祝自己生日快乐!! 趁着大学最后的一点时间学习一点新的东西,希望自己能坚持下去。 这里记录一点这几天学习中记录下的一些概念以及注意点。 基础概念 计算图(g

    相关 tensorflow_基础 (

    1.张量,计算图,会话 基于Tnesorflow的NN,用张量表示数据,用计算图搭建神经网络,用会话执行计算图,优化线上的权重(参数),得到模型。 张量(tensor) :

    相关 Tensorflow基础

    一、基础概念 TensorFlow是一种采用数据流图(data flow graphs),用于数值计算的开源软件库。其中 Tensor 代表传递的数据为张量(多维数组),