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|非线性回归的主要内容,如果未能解决你的问题,请参考以下文章