Go to file
kingecg 28cf1f533a ```
test(model): 修复矩阵形状不匹配的测试用例

- 将bias从vector改为1x2矩阵以匹配输出形状
- 更新梯度初始化为矩阵格式而非向量
- 修改输入数据创建方式,使用NewMatrix替代NewVector
- 调整期望输出计算逻辑以正确处理矩阵运算

fix(optimizer): 修复Adam优化器在矩阵参数下的索引访问

- 添加对1维和2维形状的分别处理逻辑
- 修正一阶矩和二阶矩估计的索引访问方式
- 确保矩阵参数的每个元素都能正确更新

test(optimizer): 增强优化器测试覆盖矩阵参数场景

- 添加矩阵参数的Adam优化器测试用例
- 验证内部状态矩阵形状与参数保持一致
- 确保参数沿梯度反方向正确更新
```
2026-01-01 15:44:04 +08:00
examples ``` 2026-01-01 15:14:10 +08:00
.gitignore ``` 2025-12-30 22:49:34 +08:00
LICENSE ``` 2025-12-30 23:03:54 +08:00
README.md ``` 2025-12-31 14:45:29 +08:00
convolution.go ``` 2025-12-30 23:18:07 +08:00
extended_tensor_test.go ``` 2025-12-30 23:18:07 +08:00
go.mod ``` 2025-12-31 17:52:34 +08:00
go.sum ``` 2026-01-01 15:14:10 +08:00
layers.go ``` 2025-12-30 23:18:07 +08:00
model.go ``` 2025-12-31 14:45:29 +08:00
model_test.go ``` 2026-01-01 15:44:04 +08:00
optimizer.go ``` 2026-01-01 15:44:04 +08:00
optimizer_test.go ``` 2026-01-01 15:44:04 +08:00
tensor.go ``` 2025-12-30 23:18:07 +08:00
tensor_test.go ``` 2025-12-30 23:03:54 +08:00
trainer.go ``` 2025-12-31 14:45:29 +08:00
trainer_test.go ``` 2026-01-01 15:14:10 +08:00

README.md

gotensor

gotensor 是一个用 Go 语言实现的张量计算库,专注于为 Go 开发者提供高效的数值计算能力,支持自动微分和反向传播,适用于构建轻量级机器学习模型。

功能特性

  • 基本张量运算:加法、减法、乘法、矩阵乘法
  • 数乘、转置等张量操作
  • 自动微分与反向传播机制
  • 激活函数Sigmoid、ReLU、Softmax
  • 卷积与池化操作Conv2D、MaxPool2D、AvgPool2D
  • 神经网络层与损失函数Flatten、CrossEntropy、MSE
  • 多种初始化方式:零张量、单位矩阵、随机张量
  • 模型定义和训练支持
  • 模型保存和加载
  • 多种优化器SGD、Adam

安装

go get git.kingecg.top/kingecg/gotensor

快速开始

package main

import (
    "fmt"
    "git.kingecg.top/kingecg/gotensor"
)

func main() {
    // 创建张量
    tensor1, _ := gotensor.NewTensor([]float64{1, 2, 3}, []int{1, 3})
    tensor2, _ := gotensor.NewTensor([]float64{4, 5, 6}, []int{3, 1})
    
    // 执行矩阵乘法
    result, _ := tensor1.MatMul(tensor2)
    fmt.Println(result)
}

模型训练示例

package main

import (
    "fmt"
    "git.kingecg.top/kingecg/gotensor"
)

func main() {
    // 创建模型(例如:简单的线性回归模型)
    // 这里可以使用Sequential模型或者自定义模型
    
    // 定义一些示例数据
    input, _ := gotensor.NewTensor([]float64{1, 2, 3, 4}, []int{2, 2})
    target, _ := gotensor.NewTensor([]float64{5, 6, 7, 8}, []int{2, 2})
    
    // 创建模型参数
    weights, _ := gotensor.NewTensor([]float64{0.5, 0.3, 0.2, 0.4}, []int{2, 2})
    
    // 定义模型(这里简化为单个张量,实际中会是更复杂的结构)
    // ...
    
    // 定义优化器
    optimizer := gotensor.NewSGD([]*gotensor.Tensor{weights}, 0.01)
    
    // 创建训练器
    trainer := gotensor.NewTrainer(nil, optimizer)  // 需要传入实际模型
    
    // 开始训练
    // trainer.Train(trainInputs, trainTargets, epochs, lossFn, true)
    
    fmt.Println("Training example")
}

API 文档

张量操作

  • NewTensor(data []float64, shape []int): 创建新张量
  • Add(other *Tensor): 张量加法
  • Subtract(other *Tensor): 张量减法
  • Multiply(other *Tensor): 张量逐元素乘法
  • MatMul(other *Tensor): 矩阵乘法
  • Scale(factor float64): 张量数乘
  • Sigmoid(): Sigmoid激活函数
  • ReLU(): ReLU激活函数
  • Softmax(): Softmax函数
  • Backward(): 反向传播

神经网络层

  • Flatten(): 展平张量
  • CrossEntropy(target *Tensor): 交叉熵损失
  • MeanSquaredError(target *Tensor): 均方误差损失

模型定义

  • Sequential: 序列模型
  • Model 接口: 模型的基本接口
  • SaveModel(model Model, filepath string): 保存模型
  • LoadModel(model Model, filepath string): 加载模型

优化器

  • SGD: 随机梯度下降
  • Adam: Adam优化算法

训练器

  • Trainer: 训练管理器
  • NewTrainer(model Model, optimizer Optimizer): 创建训练器
  • Train(...): 执行训练
  • Evaluate(...): 评估模型

示例

项目包含多个示例:

  • examples/basic_operation: 基本张量运算示例
  • examples/autograd: 自动微分示例
  • examples/linear_regression: 线性回归示例
  • examples/cnn_example.go: 卷积神经网络示例

贡献

欢迎提交 Issue 和 Pull Request 来帮助改进 gotensor

许可证

本项目使用 MIT 许可证 - 详见 LICENSE 文件。