机器学习 & 深度学习编程笔记

sigmoid函数

python 复制代码
def sigmoid(x):
    return 1.0 / (1+np.exp((-x)))

定义最小平方和损失函数

python 复制代码
loss = torch.nn.MSELoss()

线性回归编程

如果不加噪音就成了正常的线性函数了,所以要加噪音。

python 复制代码
torch.normal(0, 0.01, y.shape)

torch.normal(0, 0.01, y.shape)是一个用于生成服从正态分布的张量的函数。其中,0代表均值,0.01代表标准差,y.shape表示生成的张量的形状与y相同。具体而言,该函数会生成一个张量,其元素值是从均值为0、标准差为0.01的正态分布中随机采样得到的。

python 复制代码
y.reshape((-1, 1))

y.reshape((-1, 1))是将张量y进行形状重塑的操作。通过该操作,可以将y转换为一个列向量,其中每个元素保持不变。

在PyTorch中,使用reshape函数对张量进行形状调整。参数(-1, 1)表示将y重塑为一个列向量,其中-1表示自动计算此维度的大小,而1表示列的维度大小为1。

y.reshape((-1, 1))将返回一个形状调整后的新张量,而原始的y张量保持不变。

手动实现线性回归

bash 复制代码
pip install d2l
python 复制代码
import random

import torch
from d2l import torch as d2l

def synthetic_data(w,b,num_examples):
    #  生成大小为(0,1),num_examples行,len(w)列的数据x , 此处是(1000,2)
    X = torch.normal(0,1,(num_examples,len(w)))
    # y = X*w + b
    y = torch.matmul(X,w) + b
    # y 加上噪音
    y += torch.normal(0,0.01,y.shape)
    return X,y.reshape((-1,1))

'''随机(小批量)梯度下降'''
def data_iter(batch_size,features,labels):
    num_examples = features.shape[0]
    '''生成0-999'''
    indices = list(range(num_examples))
    '''打乱0-999'''
    random.shuffle(indices)
    '''0-999中每次取一个batch_size'''
    for i in range(0,num_examples,batch_size):
        '''设置一个batch的索引'''
        batch_indices = torch.tensor(indices[i:min(i+batch_size,num_examples)])
        yield features[batch_indices],labels[batch_indices]


def plot_img(features,labels):
    # 创建一个画板
    d2l.set_figsize()
    # 画一个散点图 (numpy格式的x,y,散点的像素大小)
    d2l.plt.scatter(features[:, 1].detach().numpy(), labels.detach().numpy(), 1)
    # 展示图像
    d2l.plt.show()

true_w = torch.tensor([2,-3.4])
true_b = 4.2
features,labels = synthetic_data(true_w,true_b,1000)

# 画图显示特征和标签
# plot_img(features,labels)

batch_size = 10
for X,y in data_iter(batch_size,features,labels):
    print(X,'\n',y)
    break

# 初始化模型参数, w是个列,形状为两行1列,值符合0,0.01的分布
w = torch.normal(0,0.01,size=(2,1),requires_grad=True)
b = torch.zeros(1,requires_grad=True)

# 定义线性函数
def linreg(X,w,b):
    return torch.matmul(X,w)+b

# 定义损失函数
def squared_loss(y_hat,y):
    return (y_hat - y.reshape(y_hat.shape)) ** 2 /2

# 定义优化函数
def sgd(params,lr,batch_size):
    '''小批量随机梯度下降'''
    with torch.no_grad():
        for param in params:
            '''参数 = 参数 - 1/batch_size * -学习率 * 梯度'''
            param -= lr * param.grad / batch_size
            '''一个参数一个梯度,该下一个参数了比如是w2,所以要梯度清零'''
            param.grad.zero_()


# 开始训练,定义参数和网络
lr = 0.03
num_epochs = 10
net = linreg
loss = squared_loss

for epoch in range(num_epochs):
    for X,y in data_iter(batch_size,features,labels):
        y_hat = net(X,w,b)
        L = loss(y_hat,y)
        # 计算的是每个样本的损失,所以要求和
        L.sum().backward()
        # 更新参数
        sgd([w,b],lr,batch_size)
    with torch.no_grad():
        # w,b已经经过上面的更新函数更新过了,用更新后的w,b代入公式 计算损失
        train_L = loss(net(features,w,b),labels)
        print(f'epoch {epoch+1}, loss {float(train_L.mean()):f}')
相关推荐
浊酒南街44 分钟前
决策树(理论知识1)
算法·决策树·机器学习
oneouto1 小时前
selenium学习笔记(二)
笔记·学习·selenium
B站计算机毕业设计超人1 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
学术头条1 小时前
清华、智谱团队:探索 RLHF 的 scaling laws
人工智能·深度学习·算法·机器学习·语言模型·计算语言学
sealaugh321 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
18号房客1 小时前
一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类
人工智能·深度学习·神经网络·机器学习·语言模型·自然语言处理·sklearn
feifeikon1 小时前
机器学习DAY3 : 线性回归与最小二乘法与sklearn实现 (线性回归完)
人工智能·机器学习·线性回归
古希腊掌管学习的神1 小时前
[机器学习]sklearn入门指南(2)
人工智能·机器学习·sklearn
Ven%1 小时前
如何在防火墙上指定ip访问服务器上任何端口呢
linux·服务器·网络·深度学习·tcp/ip
IT猿手2 小时前
最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解TP1-TP10及工程应用---盘式制动器设计,提供完整MATLAB代码
开发语言·深度学习·算法·机器学习·matlab·多目标算法