tensorflow2.0 学习(二)
线性回归问题
# encoding: utf-8 import numpy as np
import matplotlib.pyplot as plt data = []
for i in range(100):
x = np.random.uniform(-10., 10.) #均匀分布产生x
eps = np.random.normal(0., 0.01) #高斯分布产生一个误差值
y = 1.477*x + 0.089 +eps #计算得到y值
data.append([x, y]) #保存到data中 data = np.array(data) #转成数组的方式方便处理
plt.plot(data[:,0], data[:,1], 'b') #自己引入用于观察原始数据
#plt.show()
plt.savefig('original data.png') def mse(b, w, points): #计算所有点的预测值和真实值之间的均方误差
totalError = 0
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
totalError += (y -(w*x + b))**2 #真实值减预测值的平方
return totalError/float(len(points)) #返回平均误差值 def step_gradient(b_current, w_current, points, lr): #预测模型中梯度下降方式优化b和w
b_gradient = 0
w_gradient = 0
M = float(len(points))
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
b_gradient += (2/M) * ((w_current*x + b_current) - y) #求偏导数的公式可知
w_gradient += (2/M)*x*((w_current*x + b_current) - y) #求偏导数的公式可知
new_b = b_current - (lr*b_gradient) #更新参数,使用了梯度下降法
new_w = w_current - (lr*w_gradient) #更新参数,使用了梯度下降法
return [new_b, new_w] def gradient_descent(points, starting_b, starting_w, lr, num_iterations): #循环更新w,b多次
b = starting_b
w = starting_w
loss_data = []
for step in range(num_iterations): #计算并更新一次
b, w = step_gradient(b, w, np.array(points), lr) #更新了这一次的b,w
loss = mse(b, w, points)
loss_data.append([step+1, loss])
if step % 50 == 0: #每50次输出一回
print(f"iteration:{step}, loss{loss}, w:{w}, b:{b}")
return [b, w, loss_data] def main():
lr = 0.01 #学习率,梯度下降算法中的参数
initial_b = 0 #初值
initial_w = 0
num_iterations = 1000 #学习100轮
[b, w, loss_data] = gradient_descent(data, initial_b, initial_w, lr, num_iterations)
loss = mse(b, w, data)
print(f'Final loss:{loss}, w:{w}, b:{b}') plt.figure() #观察loss每一步情况
loss_data = np.array(loss_data)
plt.plot(loss_data[:,0], loss_data[:,1], 'g')
plt.savefig('loss.png')
#plt.show() plt.figure() #观察最终的拟合效果
y_fin = w*data[:,0] + b + eps
plt.plot(data[:,0], y_fin, 'r')
#plt.show()
plt.savefig('final data.png') if __name__ == '__main__':
main()
original data (y = w*x + b +eps)

loss rate

final data (y' = w' *x + b' + eps )

最终loss趋近9.17*10^-5, w趋近1.4768, b趋近0.0900
真实的w值1.477, b为0.089
对于线性回归问题,适用性挺好!
主要的数学代码能理解,唯有取梯度的反方向更新参数,不是很能理解!

这里还没有用到tensorflow,下一次更新基础知识!
tensorflow2.0 学习(二)的更多相关文章
- tensorflow2.0 学习(三)
用tensorflow2.0 版回顾了一下mnist的学习 代码如下,感觉这个版本下的mnist学习更简洁,更方便 关于tensorflow的基础知识,这里就不更新了,用到什么就到网上取搜索相关的知识 ...
- tensorflow2.0 学习(一)
虽说是按<TensorFlow深度学习>这本书来学习的,但是总会碰到新的问题!记录下这些问题,有利于巩固知新. 之前学过一些tensorflow1.0的知识,到RNN这章节,后面没有再继续 ...
- Tensorflow2.0学习(一)
站长资讯平台:今天学习一下Tensorflow2.0 的基础 核心库,@tf.function ,可以方便的将动态图的语言,变成静态图,在某种程度上进行计算加速 TensorFlow Lite Ten ...
- tensorflow2.0学习笔记
今天我们开始学习tensorflow2.0,用一种简单和循循渐进的方式,带领大家亲身体验深度学习.学习的目录如下图所示: 1.简单的神经网络学习过程 1.1张量生成 1.2常用函数 1.3鸢尾花数据读 ...
- TensorFlow2.0(二):数学运算
1 基本运算:加(+).减(-).点乘(*).除(/).地板除法(//).取余(%) 基本运算中所有实例都以下面的张量a.b为例进行: >>> a = tf.random.unifo ...
- tensorflow2.0学习笔记第一章第二节
1.2常用函数 本节目标:掌握在建立和操作神经网络过程中常用的函数 # 常用函数 import tensorflow as tf import numpy as np # 强制Tensor的数据类型转 ...
- tensorflow2.0学习笔记第二章第四节
2.4损失函数损失函数(loss):预测值(y)与已知答案(y_)的差距 nn优化目标:loss最小->-mse -自定义 -ce(cross entropy)均方误差mse:MSE(y_,y) ...
- tensorflow2.0学习笔记第二章第一节
2.1预备知识 # 条件判断tf.where(条件语句,真返回A,假返回B) import tensorflow as tf a = tf.constant([1,2,3,1,1]) b = tf.c ...
- tensorflow2.0学习笔记第一章第一节
一.简单的神经网络实现过程 1.1张量的生成 # 创建一个张量 #tf.constant(张量内容,dtpye=数据类型(可选)) import tensorflow as tf import num ...
随机推荐
- Flask源码之:路由加载
路由加载整体思路: 1. 将 url = /index 和 methods = [GET,POST] 和 endpoint = "index"封装到Rule对象 2. 将Ru ...
- 个人学习笔记:C语言程序结构
个人笔记:C语言程序 函数 语句 输入输出对象 标识符 关键字 函数 一个C语言源程序,是由一个或多个函数定义顺序组成的,其中必须有一个函数名为main的主函数.C语言源程序中的函数是指完成特定数据处 ...
- Golang 读写文件
读文件 func ReadFile_v1(filename string) { var ( err error content []byte ) fileObj,err := os.Open(file ...
- Spark之RDD依赖关系及DAG逻辑视图
RDD依赖关系为成两种:窄依赖(Narrow Dependency).宽依赖(Shuffle Dependency).窄依赖表示每个父RDD中的Partition最多被子RDD的一个Partition ...
- 【题解】Luogu P5288 [HNOI2019]多边形
原题传送门 HN的题目就是毒瘤 我们有以下猜想: 1.最后所有的线都连到了n号点上 2.最小步数应该为n-3-已经连到n号点的线段数量 本来有些边\((a_i,n)\)会将整个图分割成很多个区间.对于 ...
- CF1109F Sasha and Algorithm of Silence's Sounds LCT、线段树
传送门 构成一棵树可以分成两个限制:图不成环.图的点数-边数=1. 我们考虑枚举右端点\(r\)计算所有可能的左端点\(l\)的答案.我们先考虑第一个限制:图不成环.注意到当\(r\)确定的时候,满足 ...
- 在PHP中使用UUID扩展的函数
环境:CentOS Linux release 7.7.1908 (Core)PHP 7.3.11UUID Extention 1.0.4 感觉上PHP对UUID的支持似乎不是很上心,PECL中的UU ...
- jedis异常:Could not get a resource from the pool
前几天公司后端系统出现了故障,导致app多个功能无法使用,查看日志,发现日志出现较多的redis.clients.jedis.exceptions.JedisConnectionException: ...
- java之mybatis之查询及分页
1.mybatis中查询方式有3种 //查询单个值 @Test public void testFindOne()throws IOException{ SqlSession session = My ...
- Object类的toString()和equals()方法
我们知道,Object类是所有类的父类,因此也被称为根类.祖先.那么,我们就来看一看Object类的最常用的两个方法是如何用的. 1.toString方法: Object类的toString()方法默 ...