使用 Numpy 手动实现深度学习 -- 线性回归
2020-04-07 13:55
399 查看
概述
以房价预测为例,使用numpy实现深度学习网络--线性回归代码。
数据链接:https://pan.baidu.com/s/1pY5gc3g8p-IK3AutjSUUMA
提取码:l3oo
导入库
import numpy as np import matplotlib.pyplot as plt
加载数据
def LoadData(): #读取数据 data = np.fromfile( './housing.data', sep=' ' ) #变换数据形状 feature_names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV'] feature_num = len( feature_names ) data = data.reshape( [-1, feature_num] ) #计算数据最大值、最小值、平均值 data_max = data.max( axis=0 ) data_min = data.min( axis=0 ) data_avg = data.sum( axis=0 ) / data.shape[0] #对数据进行归一化处理 for i in range( feature_num ): data[:, i] = ( data[:, i] - data_avg[i] ) / ( data_max[i] - data_min[i] ) #划分训练集和测试集 ratio = 0.8 offset = int( data.shape[0] * ratio ) train_data = data[ :offset ] data_test = data[ offset: ] return data_train, data_test
模型设计
class Network( object ): ''' 线性回归神经网络类 ''' def __init__( self, num_weights ): ''' 初始化权重和偏置 ''' self.w = np.random.randn( num_weights, 1 ) #随机初始化权重 self.b = 0. def Forward( self, x ): ''' 前向训练:计算预测值 ''' y_predict = np.dot( x, self.w ) + self.b #根据公式,计算预测值 return y_predict def Loss( self, y_predict, y_real ): ''' 计算损失值:均方误差法 ''' error = y_predict - y_real #误差 cost = np.square( error ) #代价函数:误差求平方 cost = np.mean( cost ) #求代价函数的均值(即:MSE法求损失) return cost def Gradient( self, x, y_real ): ''' 根据公式,计算权重和偏置的梯度 ''' y_predict = self.Forward( x ) #计算预测值 gradient_w = ( y_predict - y_real ) * x #根据公式,计算权重的梯度 gradient_w = np.mean( gradient_w, axis=0 ) #计算每一列的权重的平均值 gradient_w = gradient_w[:, np.newaxis] #reshape gradient_b = ( y_predict - y_real ) #根据公式,计算偏置的梯度 gradient_b = np.mean( gradient_b ) #计算偏置梯度的平均值 return gradient_w, gradient_b def Update( self, gradient_w, gradient_b, learning_rate=0.01 ): ''' 梯度下降法:更新权重和偏置 ''' self.w = self.w - gradient_w * learning_rate #根据公式,更新权重 self.b = self.b - gradient_b * learning_rate #根据公式,更新偏置 def Train( self, x, y, num_iter=100, learning_rate=0.01 ): ''' 使用梯度下降法,训练模型 ''' losses = [] for i in range( num_iter ): #迭代计算更新权重、偏置 #计算预测值 y_predict = self.Forward( x ) #计算损失 loss = self.Loss( y_predict, y ) #计算梯度 gradient_w, gradient_b = self.Gradient( x, y ) #根据梯度,更新权重和偏置 self.Update( gradient_w, gradient_b, learning_rate ) #打印模型当前状态 losses.append( loss ) if ( i+1 ) % 10 == 0: print( 'iter = {}, loss = {}'.format( i+1, loss ) ) return losses
模型训练
#获取数据 train_data, test_data = LoadData() x_data = train_data[:, :-1] y_data = train_data[:, -1:] #创建网络 net = Network( 13 ) num_interator = 1000 learning_rate = 0.01 #进行训练 losses = net.Train( x_data, y_data, num_interator, learning_rate ) #画出损失函数变化趋势 plot_x = np.arange( num_interator ) plot_y = losses plt.plot( plot_x, plot_y ) plt.show()
训练结果
相关文章推荐
- 《Gluon 动手学深度学习 五》线性回归Gluon实现
- 深度学习框架Keras学习系列(一):线性代数基础与numpy使用(Linear Algebra Basis and Numpy)
- 【深度学习】tensorflow实现简单线性回归
- 深度学习1-线性回归,逻辑回归
- 深度学习FPGA实现基础知识3(Altera与百度展开合作在云数据中心使用FPGA加速)
- 动手学深度学习:1.深度学习基础--线性回归
- [深度学习]Python/Theano实现逻辑回归网络的代码分析
- 深度学习零基础入门一:线性回归
- 动手学深度学习笔记1线性回归
- 机器学习算法的Python实现 (1):logistics回归 与 线性判别分析(LDA)
- 第1章:阿里云机器学习实践之路 / 第5节:深度学习--使用TensorFlow实现图像分类
- 深度学习基础模型算法原理及编程实现--02.线性单元
- 深度学习-使用tensorflow实现猫狗识别
- 动手学深度学习之线性回归
- 自己动手实现深度学习框架-5 使用学习率优化器加快模型训练速度
- Ng深度学习笔记 1-线性回归、监督学习、成本函数、梯度下降
- 深度学习入门实战(二)-用TensorFlow训练线性回归
- [深度学习框架] Theano上回归神经网络实现
- 机器学习之线性回归及python实现
- Python的Numpy实现深度学习常用的函数