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 ...
随机推荐
- vue 所有的指令
1. v-text v-text主要用来更新textContent,可以等同于JS的text属性. <span v-text="msg"></span> 这 ...
- vue 项目记录.路飞学城(一)
前情提要: 通过vue 搭建路飞学城记录 一:项目分析 二:项目搭建 1:创建项目 vue init webpack luffy 2:初始化项目 清除默认的HelloWorld.vue组件和APP. ...
- iOS-SVProgressHUDMaskType
SVProgressHUDMaskTypeNone:默认图层样式,当HUD显示的时候,允许用户交互. SVProgressHUDMaskTypeClear:当HUD显示的时候,不允许用户交互. ...
- Thread-方法以及wait、notify简介
Thread.sleep()1.静态方法是定义在Thread类中.2.Thread.sleep()方法用来暂停当前执行的线程,将CPU使用权释放给线程调度器,但不释放锁(也就是说如果有synchron ...
- laravel5.5 __construct函数 无法使用session() 解决方法和实例
从网上查询资料得知,在laravel中使用__construct方法的时候,session还没开启,此时就需要用到中间件来解决. $this->middleware(function ($req ...
- web自动化测试---自动化脚本设置百度搜索每页显示条数
前面学的都是基础知识,本篇将进入实战练习 以百度“搜索设置”为对象进行测试用例的写作: 百度的搜索设置在首页的“设置”里面,鼠标悬停之后即可显示,如下图红框位置: 测试目标是,修改每页的显示条数为50 ...
- Windows下为 Eclipse 配置 C/C++ 编译环境(转)
1.Eclipse及CDT的安装 CDT的全称是C/C++ DevelopmentTools,CDT使得Eclipse能够支持C/C++的开发.直接下载 eclipse CDT 集成版 下载地址:ht ...
- SpringBoot全局配置文件
SpringBoot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到r ...
- winhex十六进制常用快捷键
Winhex的常用快捷键 摘要: Winhex 是一个专门用来对付各种日常紧急情况的工具.它可以用来检查和修复各种文件.恢复删除文件.硬盘损坏造成的数据丢失等.同时它还可以让你看到其他程序隐藏起来的文 ...
- 基于Visual Studio .NET2015的单元测试
基于Visual Studio .NET2015的单元测试 1. 在Visual Studio .NET2015中创建任意项目. 2. 在某个公共类的公共方法的名称上面点击右键,选择“创建 ...