Python-Tensorflow基础(三)-线性回归与非线性回归示例
2023-09-14 09:13:04 时间
线性回归:
首先还是先贴上代码:
import tensorflow as tf
import numpy as np
#可以看做为样本
#随机生成100个点
x_data =np.random.rand(100)
y_data =x_data*0.1+ 0.2
#构造一个线性模型
b = tf.Variable(1.)
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(201):
sess.run(train)
if step%20 ==0:
print(step,sess.run([k,b]))
代码分析:
这里就是简单定义了一个线性模型,作为已知的样本数据
import tensorflow as tf
import numpy as np
#可以看做为样本
#随机生成100个点
x_data =np.random.rand(100)
y_data =x_data*0.1+ 0.2
#构造一个线性模型
b = tf.Variable(1.)
k = tf.Variable(0.)
y = k *x_data + b
然后自己构造一个根据数据特征构造模型:
#构造一个线性模型
b = tf.Variable(1.)
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(201):
sess.run(train)
if step%20 ==0:
print(step,sess.run([k,b]))
非线性回归:
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
#使用numpy生成200个随机点
#生成范围[-0.5,0.5]的200个点,下面生成200行1列的数据
#但是之后要使用二维数据,因此增加一个维度
x_data = np.linspace(-0.5,0.5,200)[:,np.newaxis]#,np.newaxis相当于增加一个维度 :200*1
noise = np.random.normal(0,0.02,x_data.shape)
y_data = np.square(x_data) + noise
#定义两个placeholder
#下面[]里面表示行不确定,列只有一列
x = tf.placeholder(tf.float32,[None,1])#None 表示任意行 与样本形状对应
#None的大小取决于传入的数据格式
y = tf.placeholder(tf.float32,[None,1])
#定义神经网络中间层
#输入层是x 输出层是y 中间层作为调整
#神经元定义为[1,10],是因为输入的神经元是1个,中间层的神经元定义了10个
#权重
Weight_L1 = tf.Variable(tf.random_normal([1,10]))
#偏置值
biases_L1 = tf.Variable(tf.zeros([1,10]))
#信号的总和
Wx_plus_b_L1 = tf.matmul(x,Weight_L1) + biases_L1
#L1作为中间层的输出,用双曲正切函数作用于信号的总和
L1 = tf.nn.tanh(Wx_plus_b_L1)
#定义神经网络输出层
#用于连接输入和输出层
Weight_L2 = tf.Variable(tf.random_normal([10,1]))
#输出层神经元只有一个,所以是[1,1]
biases_L2 = tf.Variable(tf.zeros([1,1]))
Wx_plus_b_L2 = tf.matmul(L1,Weight_L2) + biases_L2
#通过接口函数得到预测值
prediction = tf.nn.tanh(Wx_plus_b_L2)
#二次代价函数
loss = tf.reduce_mean(tf.square(y-prediction))
#使用梯度下降法训练
train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)
with tf.Session() as sess:
#变量初始化
sess.run(tf.global_variables_initializer())
for _ in range(2000):
#进行训练
sess.run(train_step,feed_dict={x:x_data,y:y_data})
#获得预测值
prediction_value = sess.run(prediction, feed_dict={x:x_data})
#画图
plt.figure()
plt.scatter(x_data,y_data)
plt.plot(x_data,prediction_value,'r-',lw=5)
plt.show()
演示训练结果:
相关文章
- Python基础09-装饰器
- Python 编程 | 连载 15 - Python 的类
- python win32api messagebox_如何在Python中使用Win32 API?
- python编程是什么-Python编程
- Python-辨析type/dtype/astype用法
- java与python-如何对比Python和Java,只需三分钟告诉你!
- python基础系列教程——Python的安装与测试:python解释器、PyDev编辑器、pycharm编译器
- 【说站】python列表的数据类型分析
- 【说站】Python中三种模块类型的介绍
- Python标识符的命名规则,下列哪些是对的?_python标识符不能使用关键字
- python lambda表达式 if_Python学习-lambda表达式
- python 图像处理库_Python图像处理库
- Python基础(十三):集合的详细讲解
- python--拷贝
- 新手学Python可行吗?需要什么基础?(新手学python可行吗?需要什么基础)
- 软件测试|Python基础之包的使用和软件开发目录规范及常用内置模块
- 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( No module named ‘threadpool‘ )
- Python基础语法-基本数据类型-字典(一)
- Python基础语法-表达式(二)
- python进程之间修改数据[Manager]与进程池[Pool]详解编程语言
- Linux环境下安装Python(linux装python)