test(model): 修复矩阵形状不匹配的测试用例 - 将bias从vector改为1x2矩阵以匹配输出形状 - 更新梯度初始化为矩阵格式而非向量 - 修改输入数据创建方式,使用NewMatrix替代NewVector - 调整期望输出计算逻辑以正确处理矩阵运算 fix(optimizer): 修复Adam优化器在矩阵参数下的索引访问 - 添加对1维和2维形状的分别处理逻辑 - 修正一阶矩和二阶矩估计的索引访问方式 - 确保矩阵参数的每个元素都能正确更新 test(optimizer): 增强优化器测试覆盖矩阵参数场景 - 添加矩阵参数的Adam优化器测试用例 - 验证内部状态矩阵形状与参数保持一致 - 确保参数沿梯度反方向正确更新 ``` |
||
|---|---|---|
| examples | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
| convolution.go | ||
| extended_tensor_test.go | ||
| go.mod | ||
| go.sum | ||
| layers.go | ||
| model.go | ||
| model_test.go | ||
| optimizer.go | ||
| optimizer_test.go | ||
| tensor.go | ||
| tensor_test.go | ||
| trainer.go | ||
| trainer_test.go | ||
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 文件。