NLP(4)--实现一个线性层

前言

仅记录学习过程,有问题欢迎讨论

感觉全连接层就像一个中间层转换数据的形态的,或者说预处理数据?

代码

里面有两个部分,一部分是自己实现的,一部分是利用模块的方法实现的。

java 复制代码
import torch
import torch.nn as nn
import numpy as np

"""
numpy手动实现模拟一个线性层
"""


# 搭建一个2层的神经网络模型
# 每层都是线性层
# 继承 nn.Module
class TorchModel(nn.Module):
    def __init__(self, input_size, hidden_size1, hidden_size2):
        super(TorchModel, self).__init__()
        self.layer1 = nn.Linear(input_size, hidden_size1) # 5*3
        self.layer2 = nn.Linear(hidden_size1, hidden_size2)

    def forward(self, x):
        x = self.layer1(x)
        # 第二层输出就是y
        y_pred = self.layer2(x)
        return y_pred


# 自定义模型
class DiyModel:
    def __init__(self, w1, b1, w2, b2):
        self.w1 = w1
        self.b1 = b1
        self.w2 = w2
        self.b2 = b2

    def forward(self, x):
        # 点 * w1.T 是转置 2*3 * 3*5 === 2*5
        hidden = np.dot(x, self.w1.T) + self.b1  # 1*5
        # 2*5 * 5*2 ===  2* 2
        y_pred = np.dot(hidden, self.w2.T) + self.b2  # 1*2
        return y_pred


# 随便准备一个网络输入 2*3
x = np.array([[3.1, 1.3, 1.2],
              [2.1, 1.3, 13]])
# 建立torch 参数是隐藏层的维度
torch_model = TorchModel(3, 5, 2)
# 字典 包含了w b 因为隐藏层的函数为: y = w*x + b
print(torch_model.state_dict())
print("-----------")
#打印模型权重,权重为随机初始化
torch_model_w1 = torch_model.state_dict()["layer1.weight"].numpy()
torch_model_b1 = torch_model.state_dict()["layer1.bias"].numpy()
torch_model_w2 = torch_model.state_dict()["layer2.weight"].numpy()
torch_model_b2 = torch_model.state_dict()["layer2.bias"].numpy()
print(torch_model_w1, "torch w1 权重")
print(torch_model_b1, "torch b1 权重")
print("-----------")
print(torch_model_w2, "torch w2 权重")
print(torch_model_b2, "torch b2 权重")
print("-----------")

# 预测
torch_x = torch.FloatTensor(x)
y_pred = torch_model.forward(torch_x)
# 2*2 的矩阵
print("torch模型预测结果:", y_pred)


# #把torch模型权重拿过来自己实现计算过程
diy_model = DiyModel(torch_model_w1, torch_model_b1, torch_model_w2, torch_model_b2)
# #用自己的模型来预测
y_pred_diy = diy_model.forward(np.array(x))
print("diy模型预测结果:", y_pred_diy)
相关推荐
iAm_Ike2 小时前
Go 中自定义类型与基础类型间的显式类型转换详解
jvm·数据库·python
iuvtsrt2 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
牧子川2 小时前
009-Transformer-Architecture
人工智能·深度学习·transformer
covco3 小时前
矩阵管理系统指南:拆解星链引擎的架构设计与全链路落地实践
大数据·人工智能·矩阵
沪漂阿龙3 小时前
AI大模型面试题:支持向量机是什么?间隔最大化、软间隔、核函数、LinearSVC 全面拆解
人工智能·算法·支持向量机
lifewange3 小时前
AI编写测试用例工具介绍
人工智能·测试用例
陕西字符3 小时前
2026 西安 豆包获客优化技术深度解析:企来客科技 AI 全域获客系统测评
大数据·人工智能
掘金安东尼3 小时前
GGUF、GPTQ、AWQ、EXL2、MLX、VMLX...运行大模型,为什么会有这么多格式?
人工智能
新知图书3 小时前
市场分析报告自动化生成(使用千问)
人工智能·ai助手·千问·高效办公
无心水3 小时前
【Hermes:安全、权限与生产环境】38、Hermes Agent 安全四层纵深:最小权限原则从理论到落地的完全指南
人工智能·安全·mcp协议·openclaw·养龙虾·hermes·honcho