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

基本概念

  • 张量:张量就是多维数组(列表),用“阶”表示张量的维度,判断张量是几阶的,就通过张量右边的方括号数。
  • 数据类型:float32 、int32
  • 计算图(Graph): 搭建神经网络的计算过程,是承载一个或多个计算节点的一张图,只搭建网络,不运算。

image.png
x1、x2 表示输入,w1、w2 分别是 x1 到 y,x2 到 y 的权重,y=x1w1+x2w2。

  • 会话( Session ): 执行计算图中的节点运算
  1. #coding:utf-8
  2. import tensorflow as tf #引入TensorFlow,简写为tf
  3. x = tf.constant([[1.0, 2.0]]) # 如上图,1行2列数据
  4. w = tf.constant([[3.0], [4.0]]) # 如上图,2行1列数据
  5. y = tf.matmul(x, w) # xw矩阵乘法
  6. print y # 打印结果
  7. with tf.Session() as sess:
  8. print sess.run(y) # 执行会话并打印出执行后的结果

y:Tensor(“matmul:0”,shape(1,1),dtype=float32),sess.run(y):[[11.]]
解析:张量名称:matmul:0 数组长度:1行1列 数据类型:浮点型

矩阵乘法:x*w 须满足 x的列=w的行;y行=x行,y列=w列;对应行列相乘 (三)搭建神经网络的基础储备 - 图2 (三)搭建神经网络的基础储备 - 图3

(三)搭建神经网络的基础储备 - 图4

Linux配置

  • Vim

vim ~/.vimrc 写入:

set ts=4 表示使 Tab 键等效为 4 个空格
set nu 表示使 vim 显示行号 nu 是 number 缩写

  • 提示warning屏蔽

进入主目录下的 bashrc 文件,在bashrc 文件中加入这样一句
export TF_CPP_MIN_LOG_LEVEL=2

“0”(显示所有信息)或者”1”(不显示 info),”2”代表不显示 warning,”3”代表不显示 error。

神经网络参数

  • 神经网络的参数: 是指神经元线上的权重w,用变量表示,一般会先随机生成这些参数 。
  • 生成参数的方法是 让w等于tf.Variable ,把生成的方式写在括号里。
  • 神经网络中常用的生成随机数/数组的函数

    • tf.random_normal() 生成正态分布随机数
    • tf.truncated_normal() 生成去掉过大偏离点的正态分布随机数
    • tf.random_uniform() 生成均匀分布随机数
    • tf.zeros 表示生成全 0 数组
    • tf.ones 表示生成全 1 数组
    • tf.fill 表示生成全定值数组
    • tf.constant 表示生成直接给定值的数组
      1. #coding:utf-8
      2. import tensorflow as tf
      3. w=tf.Variable(tf.random_normal([2,3],stddev=2, mean=0, seed=1))
      4. # 生成正态分布随机数,2行3列,标准差=2,均值=0,随机种子=1
      5. # truncated_normal也类似,如果随机出来的数据偏离平均值超过两个标准差,这个数据将重新生成
      6. w=random_uniform(shape=7,minval=0,maxval=1,dtype=tf.int32,seed=1)
      7. # 均匀分布[minval,maxval)随机采样,左闭右开
      8. tf.zeros([3,2],int32) # 生成3行2列全 0 ,ones类似
      9. tf.fill([3,2],6) # 生成3行2列全 6
  • 随机种子如果去掉每次生成的随机数将不一致。

  • 如果没有特殊要求标准差、均值、随机种子是可以不写的。