使用 Numpy 手动实现深度学习 -- 线性回归

概述

以房价预测为例,使用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()

训练结果

原文地址:https://blog.51cto.com/weiyuqingcheng/2485101

时间: 2024-11-29 08:53:35

使用 Numpy 手动实现深度学习 -- 线性回归的相关文章

给深度学习入门者的Python快速教程 - 基础篇

实在搞不定博客园的排版,排版更佳的版本在: https://zhuanlan.zhihu.com/p/24162430 Life is short, you need Python 人生苦短,我用Python -- Bruce Eckel 5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5.1.1 Python简史 Python是一门解释型的高级编程语言,特点是简单明确.Python作者是荷兰人Guido van Rossum,1

一线开发者在Reddit上讨论深度学习框架:PyTorch和TensorFlow到底哪个更好?

本文标签:   机器学习 TensorFlow Google深度学习框架 分布式机器学习 PyTorch   近日,Reddit用户 cjmcmurtrie 发了一个主题为「PyTorch vs. TensorFlow」的讨论帖,想要了解这两大流行的框架之间各自有什么优势. 原帖地址:https://redd.it/5w3q74 帖子一楼写道: 我还没有从 Torch7 迁移到 TensorFlow.我玩过 TensorFlow,但我发现 Torch7 更加直观(也许是我玩得不够?).我也尝试了

深度学习之概述(Overview)

2016年被称为人工智能的元年,2017年是人能智能应用的元年:深度学习技术和应用取得飞速发展:深度学习在互联网教育场景也得到广泛应用.本文主要介绍机器学习及深度学习之定义及基本概念.相关网络结构等. 本文主要内容包括机器学习的定义及组成分类.深度学习的定义.深度学习和机器学习的区别.神经网络基本概念及基本结构.深度学习的相关核心概念(基本假设.数据集.表示.泛化.容量.优化.超参数.误差.欠拟合.过拟合.正则化).两种典型深度网络结构(CNN.RNN)基本介绍. 引言 人工智能究竟能够做什么?

深度学习框架搭建之最新版Python及最新版numpy安装

这两天为了搭载深度学习的Python架构花了不少功夫,但是Theano对Python以及nunpy的版本都有限制,所以只能选用版本较新的python和nunpy以确保不过时.但是最新版Python和最新版numpy有点不完善,很多安装步骤都要在命令行里完成,所以花了我很多时间,为了祭奠我安装numpy逝去的青春,特写此日志,确保以后的青春不再逝去.    先说说python的安装,我是64位windows系统.所以选用的是https://www.python.org/downloads/rele

python入门、python数据分析(numpy、matplotlib、sklearn等)tensflow、爬虫、机器学习、深度学习、自然语言处理、数据挖掘、机器学习项目实战、python全栈、PHP、java、java web、openCV、hadoop、matlab、android、数据结构算法和刷题等教学视频

扫描二维码加好友购买视频,绝对优惠,谢谢支持. python入门和进阶熟练教学视频 入门: 进阶: python数据分析教学视频 python数据分析晋级班 tensorflow教程及实战 python爬虫教学 机器学习课程 深度学习课程 机器学习项目班 自然语言处理教学视频 python全栈教学视频 数据挖掘视频 PHP教学视频 java java web openCV教学视频 Hadoop教学视频 matlab教学 andriod教学视频 数据结构算法班及面试班 原文地址:https://w

深度学习库比较

  深度学习库比较 库名 主语言 从语言 速度 灵活性 文档 适合模型 平台 上手难易 开发者 模式 Tensorflo C++ cuda/python 中等 好 中等 CNN/RNN Linux,OSX 难 Google 分布式/声明式 Caffe C++ cuda/python/Matlab 快 一般 全面 CNN 所有系统 中等 贾杨清 声明式 PyTorc python C/C++ 中等 好 中等 - -- 中等 FaceBook   MXNet c++ cuda/R/julia 快 好

深度学习框架总结

深度学习库比较 库名 主语言 从语言 速度 灵活性 文档 适合模型 平台 上手难易 开发者 模式 Tensorflo C++ cuda/python/Matlab/Ruby/R 中等 好 中等 CNN/RNN Linux,OSX 难 Google 分布式/声明式 Caffe C++ cuda/python/Matlab 快 一般 全面 CNN 所有系统 中等 贾杨清 声明式 PyTorc python C/C++ 中等 好 中等 - – 中等 FaceBook MXNet c++ cuda/R/

主流深度学习框架对比

深度学习研究的热潮持续高涨,各种开源深度学习框架也层出不穷,其中包括TensorFlow.Caffe.Keras.CNTK.Torch7.MXNet.Leaf.Theano.DeepLearning4.Lasagne.Neon,等等.然而TensorFlow却杀出重围,在关注度和用户数上都占据绝对优势,大有一统江湖之势.表2-1所示为各个开源框架在GitHub上的数据统计(数据统计于2017年1月3日),可以看到TensorFlow在star数量.fork数量.contributor数量这三个数

这 6 段代码,成就了如今的深度学习

从代码中追溯深度学习的历史 深度学习发展到如今的地位,离不开下面这 6 段代码.本文介绍了这些代码的创作者及其完成这些突破性成就的故事背景.每个故事都有简单的代码示例,读者们可以在FloydHub和GitHub找到相关代码. Source: Google press image图片来源:Google 新闻图片 python学习交流群:923414804,群内每天分享干货,包括最新的企业级案例学习资料和零基础入门教程,欢迎小伙伴入群学习. 要运行 FloydHub 上的代码示例,请确保您的电脑已经