feat(tensor): 添加卷积和池化操作支持 新增Conv2D、MaxPool2D和AvgPool2D方法,支持二维卷积神经网络操作。 实现了前向传播和反向传播功能,包括梯度计算。 feat(layers): 添加激活函数和损失函数 新增Softmax、Sigmoid、ReLU激活函数和CrossEntropy、MSE损失函数。 实现了展平层Flatten操作,支持多维张量展平为一维。 test(tensor): 添加扩展张量操作的单元测试 新增Sigmoid、ReLU、Softmax、Flatten和MeanSquaredError的测试用例。 验证激活函数和损失函数的正确性及数值稳定性。 example(cnn): 添加卷积神经网络示例 创建CNN示例程序,演示卷积、池化、激活函数等操作的使用。 包含完整的前向传播流程和损失计算示例。 ``` |
||
|---|---|---|
| examples | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
| convolution.go | ||
| extended_tensor_test.go | ||
| go.mod | ||
| go.sum | ||
| layers.go | ||
| tensor.go | ||
| tensor_test.go | ||
README.md
gotensor
gotensor 是一个用 Go 语言编写的张量计算库,提供了基本的张量运算、自动微分和反向传播功能。该项目旨在为 Go 语言开发者提供一个高效、易用的张量计算工具。
功能特性
- 基本张量运算:加法、减法、乘法、矩阵乘法等
- 张量操作:数乘、转置等
- 自动微分和反向传播
- 支持多种初始化方式:零张量、单位矩阵、随机张量等
安装
go get git.kingecg.top/kingecg/gotensor
快速开始
package main
import (
"fmt"
"git.kingecg.top/kingecg/gotensor"
)
func main() {
// 创建两个2x2的张量
t1_data := []float64{1, 2, 3, 4}
t1_shape := []int{2, 2}
t1, err := gotensor.NewTensor(t1_data, t1_shape)
if err != nil {
panic(err)
}
t2_data := []float64{5, 6, 7, 8}
t2, err := gotensor.NewTensor(t2_data, t1_shape)
if err != nil {
panic(err)
}
// 执行加法运算
result, err := t1.Add(t2)
if err != nil {
panic(err)
}
fmt.Printf("结果:\n%s\n", result.String())
}
示例
项目包含多个示例,展示如何使用 gotensor:
运行示例:
# 基本运算示例
go run examples/basic_operations.go
# 自动微分示例
go run examples/autograd_example.go
# 线性回归示例
go run examples/linear_regression.go
API 文档
创建张量
NewTensor(data []float64, shape []int)- 创建新的张量NewZeros(shape []int)- 创建零张量NewOnes(shape []int)- 创建全一张量NewIdentity(size int)- 创建单位矩阵
张量运算
Add(other *Tensor)- 张量加法Subtract(other *Tensor)- 张量减法Multiply(other *Tensor)- 张量逐元素乘法MatMul(other *Tensor)- 矩阵乘法Scale(factor float64)- 数乘
其他方法
ZeroGrad()- 将梯度置零Shape()- 返回张量形状Size()- 返回张量大小Get(indices ...int)- 获取指定位置的值Set(value float64, indices ...int)- 设置指定位置的值Backward()- 执行反向传播
测试
运行测试:
go test
许可证
本项目使用 MIT 许可证 - 详见 LICENSE 文件。