处理多维特征的输入

课程来源:PyTorch深度学习实践——河北工业大学

《PyTorch深度学习实践》完结合集_哔哩哔哩_bilibili

这一讲介绍输入为多维数据时的分类。

一个数据集示例如下:

由于使用的是多维的数据,因此模型中的x和y都应该变为向量的形式,变为如下式子:

而下方针对多维数据的式子中的一部分可以使用矩阵相乘的方式表示:

\[\hat y^{(i)}=\sigma([x_1^{(i)}...x_8^{(i)}]\begin{bmatrix}
w_1\\
.\\
.\\
.\\
w_8
\end{bmatrix}+b)
\]

由于我们使用的是mini-batch的计算方式,因此计算的形式如下:

\[\begin{bmatrix}
\hat y^{(1)}\\
.\\
.\\
.\\
\hat y^{(N)}
\end{bmatrix}=\sigma
\begin{bmatrix}
z^{(1)}\\
.\\
.\\
.\\
z^{(N)}
\end{bmatrix}
\]

其中z的计算方式如下:

\[Z^{(N)}=[x_1^{(N)}...x_8^{(N)}]\begin{bmatrix}
w_1\\
.\\
.\\
.\\
w_8
\end{bmatrix}+b
\]

为了利用并行计算进行优化,因此将计算改为矩阵运算如下:

\[\begin{bmatrix}
z^{(1)}\\
.\\
.\\
.\\
z^{(N)}
\end{bmatrix}=
\begin{bmatrix}
x_1^{(1)}...x_8^{(1)}\\
.\\
.\\
.\\
x_1^{(N)}...x_8^{(N)}
\end{bmatrix}
\begin{bmatrix}
w_1\\
.\\
.\\
.\\
w_8
\end{bmatrix}+b
\]

由于我们想将神经网络的层数增加几层,不是只用一层来预测,因此模型使用主要部分代码示例如下:

线性层的使用:

self.linear1 = torch.nn.Linear(8, 6)

注:叠加线性层每两层之间一定要加入非线性层,否则没有意义。

非线性层的使用:

x = self.sigmoid(self.linear1(x))

一般而言,神经网络中的隐层越多,中间神经元越多学习能力越强,但是过拟合的可能性也越大。

一个简单的神经网络的模型如下图:

代码如下:

import torch
import numpy as np import matplotlib.pyplot as plt
##1. Prepare Dataset
xy = np.loadtxt('diabetes.csv.gz', delimiter=',', dtype=np.float32)
x_data = torch.from_numpy(xy[:,:-1])
y_data = torch.from_numpy(xy[:, [-1]])
loss_list=[]
epoch_list=[] ##2. Define Model
class Model(torch.nn.Module):
def __init__(self):
super(Model, self).__init__()
##定义了三层线性层
self.linear1 = torch.nn.Linear(8, 6)
self.linear2 = torch.nn.Linear(6, 4)
self.linear3 = torch.nn.Linear(4, 1)
##定义激活函数,除了sigmoid也有其他的如self.activate = torch.nn.ReLU()
self.sigmoid = torch.nn.Sigmoid() def forward(self, x):
##处理单元(线性层+非线性变化层),三层,用同一个变量x(每一层处理的结果都传递到下一层)
x = self.sigmoid(self.linear1(x))
x = self.sigmoid(self.linear2(x))
x = self.sigmoid(self.linear3(x))
return x
model = Model() ##3. Construct Loss and Optimizer
criterion = torch.nn.BCELoss(size_average=True)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) ##4. Training Cycle
for epoch in range(10000):
##Forward
y_pred = model(x_data)
loss = criterion(y_pred, y_data)
loss_list.append(loss.item())
epoch_list.append(epoch)
print(epoch, loss.item())
# Backward
optimizer.zero_grad()
loss.backward()
# Update
optimizer.step()
print(epoch,loss)
plt.plot(epoch_list, loss_list)
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

注:上述代码没有实现mini-batch的训练模式,还是使用全部输入,一次性训练的结果。

PyTorch深度学习实践——处理多维特征的输入的更多相关文章

  1. PyTorch深度学习实践——反向传播

    反向传播 课程来源:PyTorch深度学习实践--河北工业大学 <PyTorch深度学习实践>完结合集_哔哩哔哩_bilibili 目录 反向传播 笔记 作业 笔记 在之前课程中介绍的线性 ...

  2. PyTorch深度学习实践——多分类问题

    多分类问题 目录 多分类问题 Softmax 在Minist数据集上实现多分类问题 作业 课程来源:PyTorch深度学习实践--河北工业大学 <PyTorch深度学习实践>完结合集_哔哩 ...

  3. PyTorch深度学习实践-Overview

    Overview 1.PyTorch简介 ​ PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序.它主要由Facebookd的人工智能小组开发,不仅能够 实现强 ...

  4. 深度学习实践系列(2)- 搭建notMNIST的深度神经网络

    如果你希望系统性的了解神经网络,请参考零基础入门深度学习系列,下面我会粗略的介绍一下本文中实现神经网络需要了解的知识. 什么是深度神经网络? 神经网络包含三层:输入层(X).隐藏层和输出层:f(x) ...

  5. 深度学习实践系列(3)- 使用Keras搭建notMNIST的神经网络

    前期回顾: 深度学习实践系列(1)- 从零搭建notMNIST逻辑回归模型 深度学习实践系列(2)- 搭建notMNIST的深度神经网络 在第二篇系列中,我们使用了TensorFlow搭建了第一个深度 ...

  6. 对比学习:《深度学习之Pytorch》《PyTorch深度学习实战》+代码

    PyTorch是一个基于Python的深度学习平台,该平台简单易用上手快,从计算机视觉.自然语言处理再到强化学习,PyTorch的功能强大,支持PyTorch的工具包有用于自然语言处理的Allen N ...

  7. 【PyTorch深度学习60分钟快速入门 】Part1:PyTorch是什么?

      0x00 PyTorch是什么? PyTorch是一个基于Python的科学计算工具包,它主要面向两种场景: 用于替代NumPy,可以使用GPU的计算力 一种深度学习研究平台,可以提供最大的灵活性 ...

  8. 【PyTorch深度学习】学习笔记之PyTorch与深度学习

    第1章 PyTorch与深度学习 深度学习的应用 接近人类水平的图像分类 接近人类水平的语音识别 机器翻译 自动驾驶汽车 Siri.Google语音和Alexa在最近几年更加准确 日本农民的黄瓜智能分 ...

  9. PyTorch 60 分钟入门教程:PyTorch 深度学习官方入门中文教程

    什么是 PyTorch? PyTorch 是一个基于 Python 的科学计算包,主要定位两类人群: NumPy 的替代品,可以利用 GPU 的性能进行计算. 深度学习研究平台拥有足够的灵活性和速度 ...

随机推荐

  1. 图文并茂理解iptables

    原文地址:http://www.zsythink.net/archives/1199 以下是转载内容: iptables详解:图文并茂理解iptables | 朱双印博客 这篇文章会尽量以通俗易懂的方 ...

  2. Linux下查找软件,rpm命令 dpkg命令 apt命令

    centos: 1.查询一个包是否被安装 rpm -q < package name> 2.列出已安装软件相关的所有包 rpm -qa < package name> ubun ...

  3. WTM多租户改造

    首先简单说下多租户的几种实现方式 多租户(Multi-Tenant ),即多个租户共用一个实例,租户的数据既有隔离又有共享,说到底是要解决数据存储的问题. 常用的数据存储方式有三种. 方案一:独立数据 ...

  4. dfs时间复杂度分析

    前言 之前一直想不明白dfs的时间复杂度是怎么算的,前几天想了下大概想明白了,现在记录一下. 存图方式都是链式前向星或邻接矩阵.主要通过几道经典题目来阐述dfs时间复杂度的计算方法. $n$是图中结点 ...

  5. 正向代理 、反向代理, 和 Linux系统配置nginx。

    一.正向代理和反向代理的简单介绍. 2.代理 中间商,赚差价 在没有代理的时候: 茅台酒厂--->生产了一批酒--->通过物流发送到客户的家中/客户直接到酒厂购买酒--->突然有一个 ...

  6. JS异步加载AMD和CMD

    CommonJS 是个规范,主要用于js后端,var foo = require("./foo");foo("Hi"); AMD前置加载 require.jsr ...

  7. ApacheCN Python 译文集(二)20211110 更新

    Python 应用计算思维 零.序言 第一部分:计算思维导论 一.计算机科学基础 二.计算思维要素 三.理解算法和算法思维 四.理解逻辑推理 五.探究性问题分析 六.设计解决方案和解决流程 七.识别解 ...

  8. 【第十二期】腾讯后台实习初试、复试、HR面经 (许愿OC)

    楼主投的很晚属于正常批才开始,初试面试官比较重基础,复试面试官比较看综合能力,HR小姐姐声音好听,腾讯面试官都特别nice! 一面: 看你项目很多,你挨个给我介绍一遍吧 我:一大堆按着简历介绍 日志文 ...

  9. 广播接收者案例_sd卡状态监听

    (1)定义广播接收者 import android.content.BroadcastReceiver; import android.content.Context; import android. ...

  10. 基于Apache的Tomcat负载均衡和集群(2)

    反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...