TensorFlow实现梯度下降
# -*- coding: utf-8 -*-
"""
Created on Mon Oct 15 17:38:39 2018 @author: zhen
""" import tensorflow as tf
import numpy as np
from sklearn.datasets import fetch_california_housing
from sklearn.preprocessing import StandardScaler n_epochs = 10000
learning_rate = 0.01 housing = fetch_california_housing(data_home="C:/Users/zhen/.spyder-py3/data", download_if_missing=True)
m, n = housing.data.shape
housing_data_plus_bias = np.c_[np.ones((m, 1)), housing.data]
# 归一化
scaler= StandardScaler().fit(housing_data_plus_bias)
scaled_housing_data_plus_bias = scaler.transform(housing_data_plus_bias)
# 创建常量
x = tf.constant(scaled_housing_data_plus_bias, dtype=tf.float32, name='x')
y = tf.constant(housing.target.reshape(-1, 1), dtype=tf.float32, name='y')
# 创建随机数
theta = tf.Variable(tf.random_uniform([n + 1, 1], -1.0, 1.0), name='theta')
# 矩阵乘
y_pred = tf.matmul(x, theta, name="predictions") error = y_pred - y
# 求平均值
mse = tf.reduce_mean(tf.square(error), name="mse")
"""
# 求梯度
gradients = tf.gradients(mse, [theta])[0]
# 赋值
training_op = tf.assign(theta, theta - learning_rate * gradients)
"""
# 梯度下降
optimizer = tf.train.GradientDescentOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(mse) init = tf.global_variables_initializer() with tf.Session() as sess:
sess.run(init) for epoch in range(n_epochs):
if epoch % 100 == 0:
print("Epoch", epoch, "MSE = ", mse.eval())
sess.run(training_op) best_theta = theta.eval()
print(best_theta)
结果:
Epoch 0 MSE = 9.128207
Epoch 100 MSE = 4.893214
Epoch 200 MSE = 4.8329406
Epoch 300 MSE = 4.824335
Epoch 400 MSE = 4.8187895
Epoch 500 MSE = 4.814753
Epoch 600 MSE = 4.811796
Epoch 700 MSE = 4.8096204
Epoch 800 MSE = 4.808017
Epoch 900 MSE = 4.806835
Epoch 1000 MSE = 4.805955
Epoch 1100 MSE = 4.805301
Epoch 1200 MSE = 4.8048124
Epoch 1300 MSE = 4.804449
Epoch 1400 MSE = 4.804172
Epoch 1500 MSE = 4.803962
Epoch 1600 MSE = 4.8038034
Epoch 1700 MSE = 4.803686
Epoch 1800 MSE = 4.8035927
Epoch 1900 MSE = 4.80352
Epoch 2000 MSE = 4.8034678
Epoch 2100 MSE = 4.803425
Epoch 2200 MSE = 4.8033857
Epoch 2300 MSE = 4.803362
Epoch 2400 MSE = 4.803341
Epoch 2500 MSE = 4.8033247
Epoch 2600 MSE = 4.80331
Epoch 2700 MSE = 4.8033013
Epoch 2800 MSE = 4.8032923
Epoch 2900 MSE = 4.8032856
Epoch 3000 MSE = 4.8032804
Epoch 3100 MSE = 4.803273
Epoch 3200 MSE = 4.803271
Epoch 3300 MSE = 4.8032694
Epoch 3400 MSE = 4.803267
Epoch 3500 MSE = 4.8032637
Epoch 3600 MSE = 4.8032603
Epoch 3700 MSE = 4.803259
Epoch 3800 MSE = 4.803259
Epoch 3900 MSE = 4.8032584
Epoch 4000 MSE = 4.8032575
Epoch 4100 MSE = 4.8032575
Epoch 4200 MSE = 4.803256
Epoch 4300 MSE = 4.803255
Epoch 4400 MSE = 4.803256
Epoch 4500 MSE = 4.803256
Epoch 4600 MSE = 4.803253
Epoch 4700 MSE = 4.8032565
Epoch 4800 MSE = 4.803258
Epoch 4900 MSE = 4.8032556
Epoch 5000 MSE = 4.803256
Epoch 5100 MSE = 4.8032537
Epoch 5200 MSE = 4.8032565
Epoch 5300 MSE = 4.803255
Epoch 5400 MSE = 4.8032546
Epoch 5500 MSE = 4.803254
Epoch 5600 MSE = 4.8032537
Epoch 5700 MSE = 4.8032517
Epoch 5800 MSE = 4.8032527
Epoch 5900 MSE = 4.8032537
Epoch 6000 MSE = 4.803254
Epoch 6100 MSE = 4.8032546
Epoch 6200 MSE = 4.803255
Epoch 6300 MSE = 4.8032546
Epoch 6400 MSE = 4.803253
Epoch 6500 MSE = 4.803253
Epoch 6600 MSE = 4.803253
Epoch 6700 MSE = 4.8032517
Epoch 6800 MSE = 4.803252
Epoch 6900 MSE = 4.8032517
Epoch 7000 MSE = 4.803252
Epoch 7100 MSE = 4.8032537
Epoch 7200 MSE = 4.8032537
Epoch 7300 MSE = 4.803253
Epoch 7400 MSE = 4.803253
Epoch 7500 MSE = 4.803253
Epoch 7600 MSE = 4.803254
Epoch 7700 MSE = 4.8032546
Epoch 7800 MSE = 4.8032556
Epoch 7900 MSE = 4.803256
Epoch 8000 MSE = 4.8032565
Epoch 8100 MSE = 4.8032565
Epoch 8200 MSE = 4.8032565
Epoch 8300 MSE = 4.8032556
Epoch 8400 MSE = 4.8032565
Epoch 8500 MSE = 4.8032575
Epoch 8600 MSE = 4.8032565
Epoch 8700 MSE = 4.803256
Epoch 8800 MSE = 4.803256
Epoch 8900 MSE = 4.8032556
Epoch 9000 MSE = 4.803255
Epoch 9100 MSE = 4.8032546
Epoch 9200 MSE = 4.803254
Epoch 9300 MSE = 4.8032546
Epoch 9400 MSE = 4.8032546
Epoch 9500 MSE = 4.803255
Epoch 9600 MSE = 4.803255
Epoch 9700 MSE = 4.803255
Epoch 9800 MSE = 4.803255
Epoch 9900 MSE = 4.803255
[[ 0.43350863]
[ 0.8296331 ]
[ 0.11875448]
[-0.26555073]
[ 0.3057157 ]
[-0.00450223]
[-0.03932685]
[-0.8998542 ]
[-0.87051094]]
结果样例:

TensorFlow实现梯度下降的更多相关文章
- Tensorflow梯度下降应用
import tensorflow as tfimport numpy as np #使用numpy生成随机点x_data = np.random.rand(100)y_data = x_data*0 ...
- Python之TensorFlow的变量收集、自定义命令参数、矩阵运算、梯度下降-4
一.TensorFlow为什么要存在变量收集的过程,主要目的就是把训练过程中的数据,比如loss.权重.偏置等数据通过图形展示的方式呈现在开发者的眼前. 自定义参数:自定义参数,主要是通过Python ...
- Tensorflow细节-P84-梯度下降与批量梯度下降
1.批量梯度下降 批量梯度下降法是最原始的形式,它是指在每一次迭代时使用所有样本来进行梯度的更新.从数学上理解如下: 对应的目标函数(代价函数)即为: (1)对目标函数求偏导: (2)每次迭代对参数进 ...
- 采用梯度下降优化器(Gradient Descent optimizer)结合禁忌搜索(Tabu Search)求解矩阵的全部特征值和特征向量
[前言] 对于矩阵(Matrix)的特征值(Eigens)求解,采用数值分析(Number Analysis)的方法有一些,我熟知的是针对实对称矩阵(Real Symmetric Matrix)的特征 ...
- 『TensorFlow』梯度优化相关
tf.trainable_variables可以得到整个模型中所有trainable=True的Variable,也是自由处理梯度的基础 基础梯度操作方法: tf.gradients 用来计算导数.该 ...
- 梯度下降与pytorch
记得在tensorflow的入门里,介绍梯度下降算法的有效性时使用的例子求一个二次曲线的最小值. 这里使用pytorch复现如下: 1.手动计算导数,按照梯度下降计算 import torch #使用 ...
- TensorFlow的梯度裁剪
在较深的网络,如多层CNN或者非常长的RNN,由于求导的链式法则,有可能会出现梯度消失(Gradient Vanishing)或梯度爆炸(Gradient Exploding )的问题. 原理 问题: ...
- 深度学习必备:随机梯度下降(SGD)优化算法及可视化
补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...
- 使用多个梯度下降的方式进行测试,同时使用ops.apply_gradient进行梯度的下降
1. ops = tf.train.GradientDescentOptimizer(learning_rate) 构建优化器 参数说明:learning_rate 表示输入的学习率 2.ops.co ...
随机推荐
- 关于如何使`(a === 1 && a === 2 && a === 3)`返回`true`问题的思考
看见这个面试题目,第一反应就是在变量a取值时进行了一些改变,那就要用getter,关于存取器的介绍可以看这里 var temp = 1; Object.defineProperty(window, ' ...
- C++primer笔记之顺序容器
最近又重新拾起C++primer,发现每一次看都会有不同的体验,但每一次看后因为不常用,忘记得很快,所以记笔记是很关键的一环,咋一看是浪费时间,实际上是节省了很多时间.下面就把这一节的内容做一个简单的 ...
- 【LeetCode】1. 两数之和
题目 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样 ...
- Asp.net core 跨域设置
验证环境: dotnet core 2.1/Asp.net core2.1 一.作用域在中间件层 配置的方式是在startup.cs文件Configure(IApplicationBuilder a ...
- Android中Enum(枚举)的使用
简介 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中. 创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.l ...
- TCP/IP 笔记 - 地址解析协议
地址解析协议(ARP)提供了一种在IPv4地址和各种网络技术使用的硬件地址之间的映射.ARP仅用于IPv4,IPv6使用邻居发现协议,它被合并入ICMPv6.地址解析是发现两个地址之间的映射关系的过程 ...
- Linux(CentOS6)系统安装Windows字体
这里说个插曲,最近在linux(CentOS6)服务器上面发布了个Web项目,结果发现,有一处的汉字字体渲染不出来,显示的是“□□□□”.因为我的tomcat编码已经修改了URIEncoding为UT ...
- hiveServer2 和 metastore的一点解读。
刚看了hive官网的文档,对于一些概念结合自己的经验,似乎又多了一些理解,想一想还是记下来的好,一来我是个有些健忘的人,过一段时间即便忘了,循着这个帖子,也能快速把知识点抓起来:二来或许对别人也有些启 ...
- #1 初识Python
前言 要说现在最时髦的编程语言是什么,那么一定是Python无疑了.让我们来一起来领略其风采吧! 一.Python介绍 Python的创始人为吉多·范罗苏姆(Guido van Rossum),被大家 ...
- python的Web框架,auth权限系统
使用django默认权限系统实现用户登录退出 判断用户是否登录 request.user.is_authenticated 返回的为bool值 一个简单的登录视图范式: # 导包 from djang ...