pytorch(六、七)多维特征数据的输入、加载数据集的类

PyTorch学习(六)--处理多维特征的输入 教程视频:https://www.bilibili.com/video/BV1LE411s7jD 通过前几期视频的学习,我们知道了关于一维特征的输入(也就是只有一个x)应该如何处理?但事情往往并不那么简单。比如下图这个预测一个人在一年之后得糖尿病的概率的例子,这个时候我们的输入将会有很多的指标。你可以把它看成是我们体检的各种值。最后一排的外代表了他是否会得糖尿病。 那么多维的特征输入应该怎么办呢... 阅读详情

多维特征数据的输入

对于一个多维数据,其行表示一个样本,列表示样本的特征

对于多维特征的运算,实质上可以当做特征的映射
在这里插入图片描述

代码

import  torch
import  torch.nn.functional as F
import  numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets

xy=np.loadtxt('./data/Diabetes_class.csv.gz',delimiter=',',dtype=np.float32)#加载训练集合
x_data = torch.from_numpy(xy[:,:-1])#取前八列
y_data = torch.from_numpy(xy[:,[-1]])#取最后一列

test =np.loadtxt('./data/test_class.csv.gz',delimiter=',',dtype=np.float32)#加载测试集合,这里我用数据集的最后一个样本做测试,训练集中没有最后一个样本
test_x = torch.from_numpy(test)

class Model(torch.nn.Module):
    def __init__(self):#构造函数
        super(Model,self).__init__()
        self.linear1 = torch.nn.Linear(8,6)#8维到6维
        self.linear2 = torch.nn.Linear(6, 4)#6维到4维
        self.linear3 = torch.nn.Linear(4, 1)#4维到1维
        self.sigmoid = torch.nn.Sigmoid()#因为他里边也没有权重需要更新,所以要一个就行了,单纯的算个数


    def forward(self, x):#构建一个计算图,就像上面图片画的那样
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))#将上面一行的输出作为输入
        x = self.sigmoid(self.linear3(x))
        return  x

model = Model()#实例化模型

criterion = torch.nn.BCELoss(size_average=False)
#model.parameters()会扫描module中的所有成员,如果成员中有相应权重,那么都会将结果加到要训练的参数集合上
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)#lr为学习率,因为0.01太小了,我改成了0.1

for epoch in range(1000):
    #Forward
    y_pred = model(x_data)
    loss = criterion(y_pred,y_data)
    print(epoch,loss.item())
    #Backward
    optimizer.zero_grad()
    loss.backward()
    #update
    optimizer.step()

y_pred = model(x_data)

print(y_pred.detach().numpy())

y_pred2 = model(test_x)
print(y_pred2.data.item())

加载数据集

概念

# Training cycle
for epoch in range(training_epochs):
	# Loop over all batches
	for i in range(total_batch)
  • epoch:表示训练的周期,表示所有的样本都经过前向传播和后向传播才叫一个训练周期
  • batch-size:每一次训练的时候所需要的样本数量,这个训练包括了前向传播和后向传播
  • iterations:内层循环一共执行了多少次,= 样本数量 ÷ batch-size

np.loadtxt()读取数据

loadtxt适合读取 txt 和 csv 文件,默认读取float类型的值

numpy.loadtxt(
    fname, dtype=, comments='#', 
    delimiter=None, converters=None, 
    skiprows=0, usecols=None, 
    unpack=False, ndmin=0)
  • frame:表示要读取的文件路径
  • dtype:默认是 np.float32
  • delimiter:表示分隔符,默认是空格
  • skiprows:表示跳过前几行读取,默认是0,如skiprows=2
  • usecols:表示要读取哪一些列,从0开始
  • unpack:如果设置为true表示分列读取,类似于矩阵的转置,默认是按照行读取

dataloader

可以自动进行小批量数据的生成

	#in pcdet/datasets/__init__.py
    dataloader = DataLoader(
        dataset,
        batch_size=batch_size,
        num_workers=workers,
        shuffle=True,
    )

  • batch_size:批量的大小
  • shuffle:=true时表示随机打乱数据,使得小批量数据具有随机性
  • num_workers:读取数据的时候,是否要并行的进程读取数据

在这里插入图片描述

torchvision获取数据集

在这里插入图片描述

import torchvision
from torch.utils.data import DataLoader

'''
手写数字的数据集,其中训练集有60000个样本,测试集有10000个样本,共分为0-9,10个类
'''
train_set=torchvision.datasets.MNIST(root='./dataset/mnist',train=True,download=True)
test_set=torchvision.datasets.MNIST(root='./dataset/mnist',train=False,download=True)

train_loader=DataLoader(dataset=train_set,batch_size=32,shuffle=True)
test_loader=DataLoader(dataset=test_set,batch_size=32,shuffle=False)

代码

import  torch
import  numpy as np
from torch.utils.data import Dataset
from torch.utils.data import DataLoader

'''
Dataset是一个抽象函数,不能直接实例化,所以我们要创建一个自己类,继承Dataset   
继承Dataset后我们必须实现三个函数:
__init__()是初始化函数,之后我们可以提供数据集路径进行数据的加载
__getitem__()帮助我们通过索引找到某个样本,下标操作
__len__()帮助我们返回数据集大小
DataLoader对数据集先打乱(shuffle),然后划分成mini_batch。
'''
class DiabetesDataset(Dataset):
    def __init__(self,filepath):
        xy = np.loadtxt(filepath,delimiter=',',dtype=np.float32)
        #shape本身是一个二元组(x,y)对应数据集的行数和列数,这里[0]我们取行数,即样本数
        self.len = xy.shape[0]
        self.x_data = torch.from_numpy(xy[:, :-1])
        self.y_data = torch.from_numpy(xy[:, [-1]])

    def __getitem__(self, index):
        return self.x_data[index],self.y_data[index]

    def __len__(self):
        return self.len
        
#定义好DiabetesDataset后我们就可以实例化他了
dataset = DiabetesDataset('./data/Diabetes_class.csv.gz')
#我们用DataLoader为数据进行分组,batch_size是一个组中有多少个样本,shuffle表示要不要对样本进行随机排列
#一般来说,训练集我们随机排列,测试集不。num_workers表示我们可以用多少进程并行的运算
train_loader = DataLoader(dataset=dataset,batch_size=32,shuffle=True,num_workers=2)

class Model(torch.nn.Module):
    def __init__(self):#构造函数
        super(Model,self).__init__()
        self.linear1 = torch.nn.Linear(8,6)#8维到6维
        self.linear2 = torch.nn.Linear(6, 4)#6维到4维
        self.linear3 = torch.nn.Linear(4, 1)#4维到1维
        self.sigmoid = torch.nn.Sigmoid()#因为他里边也没有权重需要更新,所以要一个就行了,单纯的算个数


    def forward(self, x):#构建一个计算图,就像上面图片画的那样
        x = self.sigmoid(self.linear1(x))
        x = self.sigmoid(self.linear2(x))
        x = self.sigmoid(self.linear3(x))
        return  x

model = Model()#实例化模型

criterion = torch.nn.BCELoss(size_average=False)
#model.parameters()会扫描module中的所有成员,如果成员中有相应权重,那么都会将结果加到要训练的参数集合上
optimizer = torch.optim.SGD(model.parameters(),lr=0.1)#lr为学习率

if __name__=='__main__':#if这条语句在windows系统下一定要加,否则会报错
    for epoch in range(1000):
        for i,data in enumerate(train_loader,0):#取出一个bath
            # repare data
            inputs,labels = data#将输入的数据赋给inputs,结果赋给labels 
            #Forward
            y_pred = model(inputs)
            loss = criterion(y_pred,labels)
            print(epoch,loss.item())
            #Backward
            optimizer.zero_grad()
            loss.backward()
            #update
            optimizer.step()



三种梯度下降

批量梯度下降、随机梯度下降和小批量梯度下降详解

在前面的学习中,前向传播是为了计算损失函数,而后向传播是为了更新各种的参数,在线性回归中,常用梯度下降来更新参数。

这里假设有数据 X = [ [ x 1 1 , x 2 1 ] , [ x 1 2 , x 2 2 ] , … … , [ x 1 n , x 2 n ] ] n × 2 X=[[x_1^1,x_2^1],[x_1^2,x_2^2],……,[x_1^n,x_2^n]]_{n×2} X=[[x11​,x21​],[x12​,x22​],……,[x1n​,x2n​]]n×2​, y = [ [ y 1 ] , [ y 2 ] , … … , [ y n ] ] n × 1 y=[[y^1],[y^2],……,[y^n]]_{n×1} y=[[y1],[y2],……,[yn]]n×1​,需要求一个 θ = [ [ θ 1 ] , [ θ 2 ] ] 2 × 1 θ=[[θ_1],[θ_2]]_{2×1} θ=[[θ1​],[θ2​]]2×1​,使得以上数据可以拟合为一个函数 y ^ \hat y y^​下面推导梯度下降的公式。

假设的,在多元回归或者逻辑回归的损失函数设为:
L o s s = 1 2 ⋅ 1 n ⋅ ∑ i = 1 n ( y ^ i − y i ) 2 = 1 2 ⋅ 1 n ⋅ [ ( x 1 1 θ 1 + x 2 1 θ 2 − y 1 ) 2 + ( x 1 2 θ 1 + x 2 2 θ 2 − y 2 ) 2 + … … + ( x 1 n θ 1 + x 2 n θ 2 − y n ) 2 ] \begin{align*} Loss &=\frac{1}{2}·\frac{1}{n}·\sum_{i=1}^{n}{(\hat y^i-y^i)^2} \\ &=\frac{1}{2}·\frac{1}{n}·[(x_1^1\theta _1+x_2^1\theta _2-y^1)^2+(x_1^2\theta _1+x_2^2\theta _2-y^2)^2+……+(x_1^n\theta _1+x_2^n\theta _2-y^n)^2] \end{align*} Loss​=21​⋅n1​⋅i=1∑n​(y^​i−yi)2=21​⋅n1​⋅[(x11​θ1​+x21​θ2​−y1)2+(x12​θ1​+x22​θ2​−y2)2+……+(x1n​θ1​+x2n​θ2​−yn)2]​

则
∂ L o s s ∂ θ 1 = 1 n ⋅ [ x 1 1 ⋅ ( x 1 1 θ 1 + x 2 1 θ 2 − y 1 ) + x 1 2 ⋅ ( x 1 2 θ 1 + x 2 2 θ 2 − y 2 ) + … … + x 1 n ⋅ ( x 1 n θ 1 + x 2 n θ 2 − y n ) ] = 1 n ⋅ ∑ i = 1 n x 1 i ( x 1 i θ 1 + x 2 i θ 2 − y i ) = 1 n ⋅ ∑ i = 1 n x 1 i ( y ^ i − y i ) \begin{align*} \frac{\partial Loss}{\partial \theta _1} &=\frac{1}{n}·[x_1^1·(x_1^1\theta _1+x_2^1\theta _2-y^1)+x_1^2·(x_1^2\theta _1+x_2^2\theta _2-y^2)+……+x_1^n·(x_1^n\theta _1+x_2^n\theta _2-y^n)] \\ &=\frac{1}{n}·\sum_{i=1}^{n}x_1^i(x_1^i\theta _1+x_2^i\theta _2-y^i) \\ &=\frac{1}{n}·\sum_{i=1}^{n}x_1^i(\hat y^i-y^i) \end{align*} ∂θ1​∂Loss​​=n1​⋅[x11​⋅(x11​θ1​+x21​θ2​−y1)+x12​⋅(x12​θ1​+x22​θ2​−y2)+……+x1n​⋅(x1n​θ1​+x2n​θ2​−yn)]=n1​⋅i=1∑n​x1i​(x1i​θ1​+x2i​θ2​−yi)=n1​⋅i=1∑n​x1i​(y^​i−yi)​

同理可得,
∂ L o s s ∂ θ 2 = 1 n ⋅ ∑ i = 1 n x 2 i ( y ^ i − y i ) \frac{\partial Loss}{\partial \theta _2} =\frac{1}{n}·\sum_{i=1}^{n}x_2^i(\hat y^i-y^i) ∂θ2​∂Loss​=n1​⋅i=1∑n​x2i​(y^​i−yi)

所以
∂ L o s s ∂ θ j = 1 n ⋅ ∑ i = 1 n x j i ( y ^ i − y i ) \frac{\partial Loss}{\partial \theta _j} =\frac{1}{n}·\sum_{i=1}^{n}x_j^i(\hat y^i-y^i) ∂θj​∂Loss​=n1​⋅i=1∑n​xji​(y^​i−yi)

则得到梯度更新的公式为
θ j ′ = θ j + α ⋅ 1 n ⋅ ∑ i = 1 n x j i ( y ^ i − y i ) \theta_j^{'} =\theta_j+\alpha· \frac{1}{n}·\sum_{i=1}^{n}x_j^i(\hat y^i-y^i) θj′​=θj​+α⋅n1​⋅i=1∑n​xji​(y^​i−yi)

批量梯度下降BGD

每一次参数更新时,按照所有样本来计算梯度,也就是所有样本都参与到Loss值的计算中。

批量梯度下降对于凸优化问题可以找到全局的最优解,这种方法在样本量不大的情况下可以快速收敛,但是如果样本的量过大,每次参数更新都需要全部的样本的参与,单次更新的时间长,需要的存储空间也大。其更新公式如下:
θ j ′ = θ j + α ⋅ 1 n ⋅ ∑ i = 1 n x j i ( y ^ i − y i ) for every j \theta_j^{'} =\theta_j+\alpha· \frac{1}{n}·\sum_{i=1}^{n}x_j^i(\hat y^i-y^i) \quad \text{for every j} θj′​=θj​+α⋅n1​⋅i=1∑n​xji​(y^​i−yi)for every j

随机梯度下降SGD

每一次参数更新只需要采用一个样本来计算梯度

随机梯度下降不能保证每一次的更新都按照全局最优点出发,随机梯度下降相对于批量梯度下降的单次更新时间快,存储要求小,在非凸优化问题上,这种方法通常可以更快的收敛到一个局部最优解。其更新公式如下:
for i to n: θ j ′ = θ j + α ⋅ ( y ^ i − y i ) for every j \begin{align*} &\text{for i to n:} \\ &\theta_j^{'} =\theta_j+\alpha·(\hat y^i-y^i) \quad \text{for every j} \end{align*} ​for i to n:θj′​=θj​+α⋅(y^​i−yi)for every j​

小批量随机梯度下降MBGD

每一次参数的更新,只需要选取一个小批量(mini-batch) b 的样本进行计算

小批量随机梯度下降是BGD和SGD的中间方案,继承了两者的优点。其更新公式如下:
for i to n: θ j ′ = θ j + α ⋅ 1 b ⋅ ∑ i i + b − 1 x j i ( y ^ i − y i ) for every j \begin{align*} &\text{for i to n:} \\ &\theta_j^{'} =\theta_j+\alpha· \frac{1}{b}·\sum_{i}^{i+b-1}x_j^i(\hat y^i-y^i) \quad \text{for every j} \end{align*} ​for i to n:θj′​=θj​+α⋅b1​⋅i∑i+b−1​xji​(y^​i−yi)for every j​

代码

数据准备

import numpy as np
x0=np.random.randint(1,2,100).reshape(100,1)
x1=np.random.randint(1,10,100).reshape(100,1)

y=x0+x1
X=np.hstack((x0,x1))
print(X.shape[0])

# print(X)# X是100*2
# print(y)# y是100*1

批量梯度下降

# 批量梯度下降BGD
def BGD(X,y):
    ept=0.001# 精度
    loss=1
    alpha=0.01# 学习率
    max_iter=0# 梯度更新次数
    theta=np.random.randint(1,10,(X.shape[1],1))# 初始化theta
    # print(theta) # 2*1
    
    # 收敛的条件
    while max_iter<10000 and loss>ept:
        # 损失函数关于theta的偏导数
        partial=(1/X.shape[0])*X.T.dot(X.dot(theta)-y)
        # partial=X.T.dot(X.dot(theta)-y)# 2*1
        # 梯度更新
        theta=theta-alpha*partial
        # print('%s:partial:%s,theta:%s'%(max_iter,partial,theta))
        
        max_iter+=1
        loss=(1/(2*X.shape[0]))*np.sum((X.dot(theta)-y)**2)
        # loss=(1/2)*np.sum((X.dot(theta)-y)**2)
        # print("loss:",loss)
    return max_iter,theta

max_iter,theta=BGD(X,y)
print('BGD:max_iter:%s\n theta:%s'%(max_iter,theta))

在这里插入图片描述

随机梯度下降

# 随机梯度下降SGD
def SGD(X,y):
    ept=0.001# 精度
    loss=1
    alpha=0.01# 学习率
    max_iter=0# 梯度更新次数
    theta=np.random.randint(1,10,(X.shape[1],1))# 初始化theta
    # print(theta) # 2*1
    
    numSample=X.shape[0]
    
    while max_iter<10000 and loss>ept:
        # 随机抽取一个样本
        i=np.random.randint(0,numSample)
        # 损失函数对theta的偏导数,这个偏导数是单个的
        partial=X[i:i+1,:].T.dot((X[i:i+1,:].dot(theta)-y[i,:]).reshape(1,1))
        theta=theta-alpha*partial
        max_iter+=1
        loss=(1/(2*X.shape[0]))*np.sum((X.dot(theta)-y)**2)
        # loss=(1/2)*np.sum((X.dot(theta)-y)**2)# 损失函数和上面的一样
    return max_iter,theta

max_iter,theta=SGD(X,y)
print('SGD:max_iter:%s\n theta:%s'%(max_iter,theta))

在这里插入图片描述

# 随机梯度下降SGD
def SGD(X,y):
    ept=0.001# 精度
    loss=1
    alpha=0.01# 学习率
    max_iter=0# 梯度更新次数
    theta=np.random.randint(1,10,(X.shape[1],1))# 初始化theta
    # print(theta) # 2*1
    
    numSample=X.shape[0]
    
    while max_iter<10000 and loss>ept:
        for i in range(numSample):
            # 随机抽取一个样本
            # i=np.random.randint(0,numSample)
            # 损失函数对theta的偏导数,这个偏导数是单个的
            partial=X[i:i+1,:].T.dot((X[i:i+1,:].dot(theta)-y[i,:]).reshape(1,1))
            theta=theta-alpha*partial
        max_iter+=1
        loss=(1/(2*X.shape[0]))*np.sum((X.dot(theta)-y)**2)
        # loss=(1/2)*np.sum((X.dot(theta)-y)**2)# 损失函数和上面的一样
    return max_iter,theta

max_iter,theta=SGD(X,y)
print('SGD:max_iter:%s\n theta:%s'%(max_iter,theta))

在这里插入图片描述
ps:这里为什么给出两种代码,其实这里按照我给出的公式其实第二种代码才是对应的代码,第二种的max_iter其实可以认为是epoch,表示周期,因为一个周期需要所有的样本数据都参与一次。而第一种代码的max_iter表示的是参数更新的次数,这两个是不同的。在批量梯度下降中,参数更新的次数与周期在数目上是一致的,这是因为批量梯度下降每一次参数更新需要所有的样本参与。同理下面的小批量随机梯度下降也是有两种代码的。

小批量梯度下降

# 小批量随机梯度下降,这里的小批量是两个样本
def MBGD(X,y):
    ept=0.001# 精度
    loss=1
    alpha=0.01# 学习率
    max_iter=0# 梯度更新次数
    theta=np.random.randint(1,10,(X.shape[1],1))# 初始化theta
    # print(theta) # 2*1
    
    numSample=X.shape[0]
    
    while max_iter<10000 and loss>ept:
        # 随机选择一个批量的数据
        i=np.random.randint(0,numSample-1)
        # 损失函数对theta的偏导数
        partial=(1/2)*X[i:i+2,:].T.dot(X[i:i+2,:].dot(theta)-y[i:i+2,:])
        # partial=X[i:i+2,:].T.dot(X[i:i+2,:].dot(theta)-y[i:i+2,:])
        theta=theta-alpha*partial
        max_iter+=1
        loss=(1/(2*X.shape[0]))*np.sum((X.dot(theta)-y)**2)
        # loss=(1/2)*np.sum((X.dot(theta)-y)**2)# 损失函数和上面的一样
    return max_iter,theta

max_iter,theta=MBGD(X,y)
print('MBGD:max_iter:%s\n theta:%s'%(max_iter,theta))

在这里插入图片描述

# 小批量随机梯度下降,这里的小批量是两个样本
def MBGD(X,y):
    ept=0.001# 精度
    loss=1
    alpha=0.01# 学习率
    max_iter=0# 梯度更新次数
    theta=np.random.randint(1,10,(X.shape[1],1))# 初始化theta
    # print(theta) # 2*1
    
    numSample=X.shape[0]
    mini_batch=2
    
    while max_iter<10000 and loss>ept:
        for i in range(0,numSample-2,mini_batch):
            # 随机选择一个批量的数据
            # i=np.random.randint(0,numSample-1)
            # 损失函数对theta的偏导数
            partial=(1/mini_batch)*X[i:i+mini_batch,:].T.dot(X[i:i+mini_batch,:].dot(theta)-y[i:i+mini_batch,:])
            # partial=X[i:i+2,:].T.dot(X[i:i+2,:].dot(theta)-y[i:i+2,:])
            theta=theta-alpha*partial
        max_iter+=1
        loss=(1/(2*X.shape[0]))*np.sum((X.dot(theta)-y)**2)
        # loss=(1/2)*np.sum((X.dot(theta)-y)**2)# 损失函数和上面的一样
    return max_iter,theta

max_iter,theta=MBGD(X,y)
print('MBGD:max_iter:%s\n theta:%s'%(max_iter,theta))

# https://blog.youkuaiyun.com/eevee_1/article/details/134944669

以上,仅个人理解,欢迎批评指正。

参考文章:批梯度下降(BGD)、随机梯度下降(SGD)、小批量梯度下降(MBGD)的理解和python 实现
pytorch(二)梯度下降算法

小白的进阶之路系列之六----人工智能从初步到精通pytorch数据集与数据加载器 本文介绍了PyTorch中数据处理的核心组件和方法。主要内容包括:1)Dataset和DataLoader的使用,可将数据与模型训练代码解耦;2)加载FashionMNIST数据集并可视化;3)创建自定义Dataset类需实现的三个关键方法;4)使用DataLoader批量加载和打乱数据;5)数据迁移的概念,通过transform对数据进行预处理。这些技术能有效提高数据处理效率和模型训练质量。 阅读详情

相关推荐

半导体工厂自动化实战:用secs4net实现设备与MES系统通信(附完整代码)

本文详细介绍了如何利用secs4net框架实现半导体工厂设备与MES系统的高效通信。通过解析SECS/GEM协议的核心架构、关键业务场景实现及性能优化实践,帮助开发者快速掌握工业自动化通信技术,提升生产效率和系统稳定性。

transformer2023的博客 892

【PyTorch深度学习实践】-- 多维度的输入

PyTorch深度学习实践

qq_46656857的博客 1184

JSON(详解)

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式来存储和表示数据,通常用于在不同的系统之间进行数据交换。JSON数据以键-值对的形式组织,可以包含对象、数组、字符串、数字等基本数据类型。它经常在Web开发、API通信等领域被广泛使用。

7705

【PyTorch深度学习实践】06_多维特征输入(以逻辑斯蒂回归为例)

数据库里一行称为一个Record。loss-epoch图像。

青山的青衫的博客 369

小程序HTTPS证书配置踩坑记:为什么Android访问失败而iOS正常?

本文深入剖析了小程序开发中常见的跨平台网络问题:Android访问HTTPS接口失败而iOS正常。核心原因在于服务器(如Nginx)HTTPS证书链配置不完整,Android系统对此校验严格,而iOS相对宽松。文章提供了从问题诊断、使用在线工具检测到修复Nginx证书链配置的完整解决方案,并总结了HTTPS部署的最佳实践,帮助开发者从根本上避免此类“玄学”故障。

weixin_29207149的博客 394

Ultralytics YOLO模块自定义与替换实战技巧

本文详细介绍了在Ultralytics YOLO框架中进行模块自定义与替换的实战技巧。通过从零开始添加全新模块(如注意力模块)到进阶替换现有模块(如增强版卷积),并涵盖模块注册、YAML配置、模型融合及ONNX导出等关键步骤,帮助开发者深度定制YOLO模型,以应对复杂检测任务与部署需求。

numpy6sculptor的博客 930

2D数据转换为3D数据。converters={},view()

daily_bikes = bikes.view(-1, 24, bikes.shape[1]) 运行之后报错shape’[-1,24,17]'is invalid for input of size 295443. 代码如下: bikes_numpy=np.loadtxt('C:\\Users\\a\\Desktop\\pytorch_4\\Bike-Sharing-Dataset (2) - 副本\\hour.csv', dtype=np.float32,d

HJ33_的博客 1175

MindIE与vLLM-Ascend性能对决:Qwen3在昇腾910B上的推理效率实测

本文深度对比了昇腾910B平台上两大推理框架MindIE与vLLM-Ascend的性能表现。通过实测Qwen3系列模型,详细分析了二者在单卡、多卡场景下的推理效率、扩展性及生产环境适用性,为AI算力基础设施选型提供关键参考。

weixin_29214335的博客 1185

Pytorch深度学习(六):多维特征的输入

多维特征的输入一、概念二、完整实现代码: 一、概念 我们来看看多维输入(Multiple Dimension Input),我们先看看多维Logistic回归模型: 假设我们有一个8维的输入,于是就可以改变我们的Logistic回归模型。 运用相关矩阵的知识我们便可以分析出Z矩阵的相关维度,并且b矩阵可以运用广播机制来参与相关的运算。 下面是对糖尿病病人的病情进行预测,预测未来是否会加重。 输入有8个指标,也就是8个维度,输出只有一个维度即是否加重病情。 维度的变化其实就是线性代数中矩阵乘法的作用:[m

qq_42585108的博客 2029

阿里云人工智能工程师ACA认证免费课程学习笔记

阿里云人工智能工程师ACA认证免费课程学习笔记

engchina的专栏 2014

Challenge 4 - OSCP A

在c盘下发现一个windows.old,在里面可以找到SYSTEM和SAM文件,下载到本地,利用samdump2解密发现没解出来,再来试试pwdump.py(https://github.com/CiscoCXSecurity/creddump7)得到压缩包密码bludecode,解压之后发现一个比较特殊的文件configuration.php,里面有两个类似密码的字符串。登录之后在/opt/backups/下发现几个特殊文件,其中sitebackup3.zip是个正常的压缩包。但是这个压缩包是有密码的。

羽的博客 5786

使用PyTorch处理多维特征输入的完美指南

这就是使用PyTorch处理多维特征输入的基本流程。当然,实际应用中,你可能需要更复杂的神经网络结构,更大的数据集,以及更多的调优和正则化技巧。但这个指南可以帮助你入门如何处理多维特征输入的问题,并利用PyTorch构建强大的深度学习模型。希望这篇博客对你有所帮助!挑战与创造都是很痛苦的,但是很充实。

null18的博客 2833

TC3XX - MCAL知识点(四十二):AURIX™ TC3xx实现多相电机需要多核配合使用的场景与实操分析

本文探讨了多相电机控制系统中的关键技术问题,重点分析了多核处理器在电机控制中的应用。针对十二相电机等复杂应用场景,提出了同步采样、多核协同等解决方案。文章详细阐述了相电流同步采样原理及EBTresos配置方法,分析了ADC硬件触发机制和多核配合策略。通过Core0和Core1的协同工作设计,解决了位置信息采集与FOC算法执行的时序问题,并提供了代码实现示例。实验验证了采用ATOM0_7同时触发两个核ADC中断的可行性,为多相电机控制系统的实现提供了技术参考。

梦想技术家 498

【pytorch(07)】数据加载器,构建数据类Dataset类、TensorDataset类,数据集加载案例

torchvision.transforms 和 torchvision.datasets 是 PyTorch 中处理计算机视觉任务的两个核心模块,它们为图像数据的预处理和标准数据集的加载提供了强大支持。在 PyTorch 中官方提供了一些经典的数据集,如 CIFAR-10、MNIST、ImageNet 等,可以直接使用这些数据集进行训练和测试。会根据文件夹的结构来加载图像数据。的一个简单实现,它封装了张量数据,适用于数据已经是张量形式的情况。在训练或者验证的时候,需要用到数据加载器批量的加载样本。

2302_76685892的博客 1052

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

多维度输入问题和加载数据集

老师视频里面的:xy=np.loadtxt('diabetes.csv,gz',delimiter=',',dtype=np.float32)应该是将diabetes_data.csv.gz和diabetes_target.csv.gz的数据合并了,在导入数据集的时候要分别导入x,y。由于每一层的输出又变成下一层的输入,所以我们可以不用定义新的变量,直接使用x即可。用自带的数据集跑出来的数据太奇怪了,损失有350多,我改用老师的数据集。现在的输入x是十维的,包含442个样本,需要导入数据集文件。

BKXjilu的博客 1255

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【PyTorch深度学习实践】深度学习之多维特征输入和加载数据集

深度学习之多维特征输入和加载数据集

qq_56550595的博客 936

pytorch学习—7.处理多维特征的输入

下图为有关的具体矩阵运算,把方程运算转换成矩阵这种向量化的运算之后,可以利用计算机GPU/CPU的并行运算的能力来提高整个运算的速度。神经网络层次叠加的过程,就是维度不断下降的过程。一般数据x的各项特征横着写,符合数据在表中的格式(每一列代表一个特征),便于理解。一个样本里有八个特征,但计算的最终结果需要是一个实数,所以将样本中的每一个。在之前的学习中,因为一个样本里只有一个特征,所以只用这。(神经网络并不是学习能力越强越好,学习能力太强,会学习数据集中的一些。实现,通过找到最优的权重,组合起来的。

m0_63581095的博客 1062

PyTorch学习6:多维特征输入

PyTorch学习6:多维特征输入。

qq_59940419的博客 777

pytorch学习记录之处理多维特征的输入

xy = pd.read_csv(r"C:\Users\Administrator\Desktop\diabetes.csv"):里面写文件路径,这里一定要在前面加r,因为可以避免在Windows路径中的反斜杠。一般来说,中间的层数越多,神经元个数越多,学习能力越强,但是会把数据的噪声学习进去,我们要保留的是数据本身的一种规律。但是空间变换不一定是线性的,我们希望用多个线性变换曾,通过调整权重,把他们组合起来,去模拟一种非线性的空间变换。本文使用的数据集在课程里面,需要的请移步b站课程。

nmb6erlaxi的博客 1073

07 Multiple Dimension Input (处理多维特征的输入)

本节内容是学习 刘二大人的《PyTorch深度学习实践》的 07 Multiple Dimension Input (处理多维特征的输入)。

m0_72800308的博客 1309

数据集搭建

  在深度学习中,数据集扮演着至关重要的角色。它们是训练机器学习模型的基础,决定了模型能够学习到的模式和特征。要训练自己的模型,首要任务就是找到需要的合适数据集。可以通过在网上查找资源、雇佣人力采集、自己采集等方式实现数据的采集工作。按照给定的标签格式分类,这些数据集可以分类为:  数据集划分:假设你已经拥有了所需要的数据集(别急,下一节会介绍如何构建自己的数据集并将其封装为模型需要的格式),那么如何使用数据集对模型进行训练与评估呢,重要的一点是如何划分训练集与测试集,而训练集又可细分为训练集与验证集,常用

cout_OK的博客 5338

七、加载数据集

《PyTorch深度学习实践》课后作业

beyond谚语的博客 1635

PyTorch深度学习实践概论笔记7-处理多维特征的输入

单维:输入x是一个实数 多维输入:x有多个不同的特征,预测对应的分类 对于回归问题:输出值y是一个实数 对于分类问题:输出y属于一个离散的集合 Diabetes Dataset 对于上面这个数据集,在机器学习中每一行叫做一个样本,每一列叫做一个特征。在数据库中,每一行叫做一个记录,每一列叫做一个字段。 Multiple Dimension Logistic Regression Model 在机器学习里面,拿到数据表之后,把内容分成两部分,一部分作为输入x,另一部分作为输入y...

csdn_xmj的博客 2406

Pytorch深度学习实践(6)处理多维特征的输入

Pytorch深度学习实践课程(6)处理多维特征的输入笔记与代码

Iawfy22的博客 1056

pytorch深度学习实践2——Logistic回归,批标准化Batch Normalization,处理多维特征的输入,加载数据集

Logistic Regression 逻辑斯蒂回归 Logistic Regression,解决分类问题 Logistic函数——饱和函数 logistic 回归代码: 处理多维特征的输入 最后模型的学习能力并不是越强越好,越强会将噪声也学习到,对真实的估计值产生偏移,所以学习能力需要具有一定的泛化能力才是最好的。 创建数据: 设计模型: 构建损失函数和优化器 训练...

qq_42832272的博客 1397

【Pytorch】新手入门:基于sklearn实现鸢尾花数据集的加载

🌸【机器学习实战】轻松上手鸢尾花数据集!🌼 新手也能玩转机器学习!本文带你一探鸢尾花数据集的奥秘,基于sklearn轻松加载,掌握数据集加载技巧。📚 通过探索数据集特征,你将深入理解机器学习基础。更有模型训练实战,让你从零到一构建分类器。🔍 模型性能不佳?别担心,我们教你如何优化模型,轻松提升分类准确率!🛠️ 最后,通过模型选择,找到最适合你的鸢尾花分类模型。新手也能成为机器学习大师!🌈 快来加入我们,开启你的机器学习之旅吧!#鸢尾花数据集 #sklearn加载 #机器学习实战 #模型

创作高质量博文,分享知识,共同进步! 5341
上一篇: pytorch(四、五、八)用pytorch实现线性回归和逻辑斯蒂回归(分类)以及多分类问题
下一篇: pytorch(九)卷积神经网络
@@老胡
博客等级 码龄7年 291粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值