A deep learning framework for learning. Of course it's fun, too
当前版本1.5.0
基于numpy
使用起来没什么要求
静态图隶属 StaticGraph 模块
其拥有上下文管理器Session、节点Operation、图Graph
节点中还有熟悉的nn模块😀(如果你喜欢tensorflow1.x的话)
其中实现的节点并不多(但你可以自己实现一个节点)
其要求就是实现节点的计算和求导
动态图隶属 DynamicGraph 模块
其拥有fluid模块(是的,仿的PaddlePaddle飞桨的库的名字)
推荐一下飞桨,真的让我学到了很多东西
你可以自定义一个自己的动态图模型
其要求就是继承DynamicGraph这个类并实现forward
剩下的交给warrior
当然,实现的很简陋,是基于变量的名字来保存和读取
而且仅仅是保存了变量而并非整个模型
个人能力有限,请随意吐槽(但不要让我听到😀)
比如线性回归demo(动态图和静态图)
比如手写数字识别(全连接)demo
注释应当很完善吧(应该吧?)(我会补齐的)
那么?如何安装呢?
简单!这里提供whl
如果我没有上传GitHub那么可能是还没来得及
通过 此链接 同样可以通过我的博客下载
cmd进入 warrior-1.5.0-py3-none-any.whl 所在目录(是压缩包的先解压)
随后通过pip指令安装
pip install warrior-1.5.0-py3-none-any.whl
试一下是否安装成功
import warrior as wr
a = wr.Constant(1, name="a")
b = wr.Constant(2, name="b")
with wr.Session() as sess:
res = sess.run(a+b)
print(res)
噢~抱歉,暂时没有文档呢...
不过我相信聪明的你一定能够很快的理解
这也是学习的一部分嘛
线性回归demo
import warrior as wr
import numpy as np
# 不使用可视化的可以不导入plt
import matplotlib.pyplot as plt
using_restore = True
checkpoint_path = "test.emblem"
# 生成100个-1 到 1之间的等差数列数
input_x = np.linspace(-1, 1, 100)
np.random.shuffle(input_x)
input_y = input_x * 3 + np.random.randn(input_x.shape[0]) * 0.5
# 压成(批大小100,1)
input_x = np.reshape(input_x, (-1, 1))
input_y = np.reshape(input_y, (-1, 1))
# 使用全局默认图
with wr.Graph().as_default():
# 定义占位符,设置形状和类型
x = wr.Placeholder(shape=input_x.shape, dtype=type(input_x), name="x")
real_y = wr.Placeholder(input_y.shape, type(input_y), name="real_y")
weight = wr.Variable(np.random.normal(loc=0.0, scale=1.0, size=(1, 1)), name="weight")
bias = wr.Variable(np.random.normal(loc=0.0, scale=1.0, size=()), name="bias")
y = weight*x + bias
# sse和方差损失(等reduce mean可以变均方差损失,或者sse/批大小)
sse_loss = wr.ReduceSum(wr.Square(y - real_y))
# 梯度下降优化器
optimizer = wr.train.GradientDescentOptimizer(learning_rate=0.005)
train_op = optimizer.minimize(sse_loss)
with wr.Session() as sess:
epoch = 30
if os.path.exists(checkpoint_path) and using_restore:
sess.restore(checkpoint_path)
for step in range(epoch):
loss = sess.run(sse_loss, feed_dict={
x: input_x, real_y: input_y
}, noauto_using_fast=True)
print("step: {}, loss: {}".format(str(step), str(loss)))
sess.run(train_op)
sess.save("test.emblem", is_cover=True)
# 与此相同,默认会自动补全后缀(也支持别的后缀但不建议)
# sess.save("test", is_cover=True)
pred_w, pred_b = sess.run(weight, bias, feed_dict={
x: input_x, real_y: input_y
}, noauto_using_fast=True)
print(pred_w, pred_b)
# 可视化代码,没导入库的可以不写
max_x, min_x = np.max(input_x), np.min(input_x)
max_y, min_y = float(pred_w) * max_x + float(pred_b), float(pred_w) * min_x + float(pred_b)
plt.plot([max_x, min_x], [max_y, min_y], color='r')
plt.scatter(input_x, input_y)
plt.show()
其余例如动态图demo以及全连接神经网络demo👇
更多请参考我的博客