TensorFlow|非线性回归

Posted liuhuacai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow|非线性回归相关的知识,希望对你有一定的参考价值。

理解:tensorflow神经网络框架,主要运算部分在ts在外进行。可以简单的理解为:写出公式----执行会话----送出运算

一.简单矩阵乘法运算

  1.张量:多维数组

      0阶张量:123

      1阶张量:[1,2,3]     数组列表

      2阶张量:[[1,2,3],[4,5,6],[7,8,9]]     矩阵3X3

                 [[1,2,3]]    矩阵1X3

                 [[1],[2],[3]]    矩阵3X1   

      n阶张量:[[[[[[[[````````]]]]]]]]右边括号数

  2.实现矩阵的乘法:写出公式,执行会话

    

import tensorflow as tf

x = tf.constant([[1,2,3]])         ###定义x矩阵  1x3
w = tf.constant([[4],[5],[6]])     ###定义w矩阵  3x1
y = tf.matmul(x,w)                 ###定义矩阵乘法 y = xw

with tf.compat.v1.Session() as sess:  ###用with调用会话开始计算
    print(sess.run(y))                ###运行结果[[32]] 只有一个值二阶张量(矩阵)

二.简单的神经网络

  非线性回归:

  •   1.数据准备--特征提取
  •   2.前向传播:先写公式,再会话执行
  •   3.反向传播:特征数据喂给NN,优化权重w参数
  •   4.使用训练好的模型预测和分类

  1.数据准备

  通过 y=x^2+随机数生成模拟的输入数据

x_data = np.linspace(-0.5, 0.5, 200)[:, np.newaxis]
noise = np.random.normal(0, 0.02, x_data.shape)
y_data = np.square(x_data) + noise

  说明:np.linspace(-0.5,0.5,200)在-0.5到0.5间生成200个等差数列     得到一维数组

          np.linspace(-0.5, 0.5, 200)[:, np.newaxis]  将一维数组转化成矩阵

比如:数组 a1= [1 2 3 4  5 ]                  shape:(5,)

           矩阵 a2 = a1[:, np.newaxis]        shape:(5,1)                          5行1列矩阵

   矩阵 a3 = a1[np.newaxis, :]        shape:(1,5)      [[1 2 3 4 5]]  1行5列矩阵

  2.写出公式,搭建NN      y = xw+b   

    输入层:单个神经元的形状shape: 1x1向量(矩阵、这里是单个数字)

    中间层:这里设置10个神经元:L1= xw1+b1       所以权重形状 1x10   偏置形状1x10

    输出层:输出单个神经元形状shape:1x1向量  L2= L1w2+b2        1x10   10x1   = 1 x 1

    

    定义占位符,用于批量接受输入

# 定义两个placeholder
x = tf.compat.v1.placeholder(tf.float32, [None, 1])
y = tf.compat.v1.placeholder(tf.float32, [None, 1])

    定义隐藏层:L1= softmax(xw1+b1)

# 定义神经网络中间层  单个一维输入(一个神经元)  扩展到10维(10个神经元)  
W1 = tf.Variable(tf.random.normal([1, 10])) b1 = tf.Variable(tf.zeros([1, 10])) SL1 = tf.matmul(x, W1) + b1 L1 = tf.nn.tanh(SL1)

    定义输出层:L2 = softmax(L1w2+b2)

# 定义神经网络输出层       10维(10个神经元)  降低至   1维(一个神经元)预测
W2 = tf.Variable(tf.random.normal([10, 1]))
b2 = tf.Variable(tf.zeros([1, 1]))
SL2 = tf.matmul(L1, W2) + b2
prediction = tf.nn.tanh(SL2)

  

  

    

 

    

        

 

 

 

  

 

 

 

 

 

  

       

以上是关于TensorFlow|非线性回归的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow-非线性回归

TensorFlow 用TensorFlow实现弹性网络回归算法(多线性回归)

Tensorflow之单变量线性回归问题的解决方法

tensorflow-非线性回归

使用 Tensorflow 的多元线性回归模型

单变量线性回归:TensorFlow 实战(实战篇)