## 代码示例
* [递归下降解线性方程组](#递归下降解线性方程组)
* [线性回归](#线性回归)
* [线性SVM](#线性SVM)
* [2x4x2神经网络环状数据分类](#2x4x2神经网络环状数据分类)
* [2x8x8x2神经网络螺旋型数据分类](#2x8x8x2神经网络螺旋型数据分类)
* [2x16x16x16x3网络实现多分类](#2x16x16x16x3网络实现多分类)
* [2x8x8x8x8x2网络分类网格状数据](#2x8x8x8x8x2网络分类网格状数据)
* [回归神经网络](#回归神经网络)
* [卷积神经网络](#卷积神经网络)
### 递归下降解线性方程组
![](http://latex.codecogs.com/gif.latex?x_1+2x_2=3)
![](http://latex.codecogs.com/gif.latex?x_1+3x_2=4)
![](http://latex.codecogs.com/gif.latex?x_1,x_2)初始化为 0, 0
```python
import paradox as pd
# 定义符号,A为方程系数矩阵,x为自变量,b为常数项。
A = pd.Constant([[1, 2], [1, 3]], name='A')
x = pd.Variable([0, 0], name='x')
b = pd.Constant([3, 4], name='b')
# 使用最小二乘误差定义loss。
loss = pd.reduce_mean((A @ x - b) ** 2)
# 创建梯度下降optimizer
optimizer = pd.GradientDescentOptimizer(0.01)
# 创建loss的计算引擎,申明变量为x。
loss_engine = pd.Engine(loss, x)
# 迭代至多10000次最小化loss。
for epoch in range(10000):
optimizer.minimize(loss_engine)
loss_value = loss_engine.value()
print('loss = {:.8f}'.format(loss_value))
if loss_value < 0.0000001: # loss阈值。
break
# 输出最终结果。
print('\nx =\n{}'.format(x.value))
```
运行结果:
```
...
loss = 0.00000010
loss = 0.00000010
loss = 0.00000010
x =
[ 0.99886023 1.00044064]
```
[回到顶部](#readme)
### 线性回归
```python
import numpy as np
import matplotlib.pyplot as plt
import paradox as pd
# 随机生成点的个数。
points_sum = 200
x_data = []
y_data = []
# 生成y = 2 * x + 1直线附近的随机点。
for _ in range(points_sum):
x = np.random.normal(0, 2)
y = x * 2 + 1 + np.random.normal(0, 2)
x_data.append(x)
y_data.append(y)
x_np = np.array(x_data)
y_np = np.array(y_data)
# 定义符号。
X = pd.Constant(x_np, name='x')
Y = pd.Constant(y_np, name='y')
w = pd.Variable(0, name='w')
b = pd.Variable(1, name='b')
# 使用最小二乘误差。
loss = pd.reduce_mean((w * X + b - Y) ** 2)
# 创建loss计算引擎,申明变量为w和b。
loss_engine = pd.Engine(loss, [w, b])
# 梯度下降optimizer。
optimizer = pd.GradientDescentOptimizer(0.00005)
# 迭代100次最小化loss。
for epoch in range(100):
optimizer.minimize(loss_engine)
loss_value = loss_engine.value()
print('loss = {:.8f}'.format(loss_value))
# 获取w和b的训练值。
w_value = pd.Engine(w).value()
b_value = pd.Engine(b).value()
# 绘制图像。
plt.title('Paradox implement Linear Regression')
plt.plot(x_data, y_data, 'ro', label='Data')
plt.plot(x_data, w_value * x_data + b_value, label='Regression')
plt.legend()
plt.show()
```
运行结果:
![LinearRegression](https://raw.githubusercontent.com/ictxiangxin/paradox/master/documentations/images/linear_regression.png)
[回到顶部](#readme)
### 线性SVM
```python
import numpy as np
import matplotlib.pyplot as plt
import paradox as pd
# 每类随机生成点的个数。
points_sum = 100
c1_x = []
c1_y = []
c2_x = []
c2_y = []
# 分别在(0, 0)点附近和(8, 8)点附近生成2类随机数据。
for _ in range(points_sum):
c1_x.append(np.random.normal(0, 2))
c1_y.append(np.random.normal(0, 2))
c2_x.append(np.random.normal(8, 2))
c2_y.append(np.random.normal(8, 2))
# 定义符号。
c1 = pd.Constant([c1_x, c1_y], name='c1')
c2 = pd.Constant([c2_x, c2_y], name='c2')
W = pd.Variable([[1, 1], [1, 1]], name='w')
B = pd.Variable([[1], [1]], name='b')
# 定义SVM loss函数。
loss = pd.reduce_mean(pd.maximum(0, [[1, -1]] @ (W @ c1 + B) + 1) + pd.maximum(0, [[-1, 1]] @ (W @ c2 + B) + 1))
# 创建loss计算引擎,申明变量为W和B。
loss_engine = pd.Engine(loss, [W, B])
# 创建梯度下降optimizer。
optimizer = pd.GradientDescentOptimizer(0.01)
# 迭代至多1000次最小化loss。
for epoch in range(1000):
optimizer.minimize(loss_engine)
loss_value = loss_engine.value()
print('loss = {:.8f}'.format(loss_value))
if loss_value < 0.001: # loss阈值。
break
# 获取W和B的训练结果。
w_data = pd.Engine(W).value()
b_data = pd.Engine(B).value()
# 计算分类直线的斜率和截距。
k = (w_data[1, 0] - w_data[0, 0]) / (w_data[0, 1] - w_data[1, 1])
b = (b_data[1, 0] - b_data[0, 0]) / (w_data[0, 1] - w_data[1, 1])
# 分类面的端点。
x_range = np.array([np.min(c1_x), np.max(c2_x)])
# 绘制图像。
plt.title('Paradox implement Linear SVM')
plt.plot(c1_x, c1_y, 'ro', label='Category 1')
plt.plot(c2_x, c2_y, 'bo', label='Category 2')
plt.plot(x_range, k * x_range + b, 'y', label='SVM')
plt.legend()
plt.show()
```
运行结果:
![LinearSVM](https://raw.githubusercontent.com/ictxiangxin/paradox/master/documentations/images/linear_svm.png)
[回到顶部](#readme)
### 2x4x2神经网络环状数据分类
```python
import numpy as np
import matplotlib.pyplot as plt
import paradox as pd
# 每类随机生成点的个数。
points_sum = 100
# 在(0, 0)点附近生成一堆点然后以4为半径在周围生成一堆点构成2类随机数据。
c1_x, c1_y, c2_x, c2_y = [], [], [], []
for _ in range(points_sum):
c1_x.append(np.random.normal(0, 1))
c1_y.append(np.random.normal(0, 1))
r = np.random.normal(4, 1)
theta = np.random.normal(0, 2 * np.pi)
c2_x.append(r * np.cos(theta))
c2_y.append(r * np.sin(theta))
c_x = c1_x + c2_x
c_y = c1_y + c2_y
# 定义符号。
A = pd.Variable([c_x, c_y], name='A')
W1 = pd.Variable(np.random.random((4, 2)), name='W1') # 输入层到隐含层的权重矩阵。
W2 = pd.Variable(np.random.random((2, 4)), name='W2') # 隐含层到输出层的权重矩阵。
B1 = pd.Variable(np.random.random((4, 1)), name='B1') # 隐含层的偏置。
B2 = pd.Variable(np.random.random((2, 1)), name='B2') # 输出层的偏置。
K = pd.Constant([[-1] * points_sum + [1] * points_sum, [1] * points_sum + [-1] * points_sum])
# 构建2x4x2网络,使用ReLu激活函数。
model = pd.maximum(W2 @ pd.maximum(W1 @ A + B1, 0) + B2, 0)
# 使用SVM loss。
loss = pd.reduce_mean(pd.maximum(pd.reduce_sum(K * model, axis=0) + 1, 0))
# 创建loss计算引擎,申明变量为W1,W2,B1和B2。
loss_engine = pd.Engine(loss, [W1, W2, B1, B2])
# 创建梯度下降optimizer。
optimizer = pd.GradientDescentOptimizer(0.03)
# 迭代至多10000次最小化loss。
for epoch in range(10000):
optimizer.minimize(loss_engine)
if epoch % 100 == 0: # 每100次epoch检查一次loss。
loss_value = loss_engine.value()
print('loss = {:.8f}'.format(loss_value))
if loss_value < 0.001: # loss阈值。
break
# 创建预测函数。
predict = pd.where(pd.reduce_sum([[-1], [1]] * model, axis=0) < 0, -1, 1)
# 创建预测函数计算引擎。
predict_engine = pd.Engine(predict)
# 设置网格密度为0.1。
h = 0.1
# 生成预测采样点网格。
x, y = np.meshgrid(np.arange(np.min(c_x) - 1, np.max(c_x) + 1, h), np.arange(np.min(c_y) - 1, np.max(c_y) + 1, h))
# 绑定变量值。
predict_engine.bind = {A: [x.ravel(), y.ravel()]}
# 生成采样点预测值。
z = predict_engine.value().reshape(x.shape)
# 绘制图像。
plt.title('Paradox implement 2x4x2 Neural Network')
plt.plot(c1_x, c1_y, 'ro', label='Category 1')
plt.plot(c2_x, c2_y, 'bo', label='Category 2')
plt.contourf(x, y, z, 2, cmap='RdBu', alpha=.6)
plt.legend()
plt.show()
```
运行结果:
![2x4x2NeuralNetwork](https://raw.githubusercontent.com/ictxiangxin/paradox/master/documentations/images/2x4x2_neural_network.png)
[回到顶部](#readme)
### 2x8x8x2神经网络螺旋型数据分类
```python
import numpy as np
import matplotlib.pyplot as plt
import paradox as pd
# 每类随机生成点的个数。
points_sum = 100
# 产生一个互相
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Numpy 已经提供了基本上所有需要的计算操作,我们需要的是一个支持自动微分(autograd)的框架来计算多个操作的梯度,这是模块化方法构建神经网络层的标准化方法,通过自动微分的框架,我们可以将优化器、激活函数等组合在一起用于训练神经网络。 所以一个基本的深度学习框架的组件总结如下: 一个autograd系统 神经网络层 神经网络模型 优化器 激活函数 数据集 接下来,我们将逐一介绍这些组件,看看它们的作用以及如何使用他们,这里将使用 gradflow(这是一个个人开源教育 autograd 系统)因为它支持深度神经网络,并且和 PyTorch API基本一致。
资源推荐
资源详情
资源评论
收起资源包目录
纯python3和numpy实现的符号计算深度学习框架。.rar (56个子文件)
纯python3和numpy实现的符号计算深度学习框架。
新建文本文档.txt 19B
paradox-master
documentations
symbolic_computing.md 1KB
images
linear_regression.png 29KB
linear_svm.png 37KB
convolutional_neural_network.png 35KB
2x8x8x2_neural_network.png 34KB
2x16x16x16x3_multi_classification.png 42KB
1x64x1_regression_neural_network.png 24KB
2x8x8x8x8x2_grid_classification.png 48KB
2x4x2_neural_network.png 32KB
graph_example.png 34KB
README.md 298B
_config.yml 26B
setup.py 1KB
examples
solve_equation_set.py 762B
2x16x16x16x3_multi_classification.py 2KB
regression_neural_network.py 972B
basic.py 603B
2x8x8x8x8x2_grid_classification.py 2KB
support_vector_machine.py 2KB
2x8x8x2_neural_network.py 3KB
linear_regression.py 1KB
convolutional_neural_network.py 3KB
README.md 19KB
2x4x2_neural_network.py 2KB
.gitignore 0B
README.md 1KB
paradox
__init__.py 189B
data
__init__.py 76B
data_handler
__init__.py 50B
mnist.py 4KB
data_set
__init__.py 335B
data_2d.py 3KB
utils
__init__.py 389B
storage.py 223B
initialization.py 554B
classification.py 535B
traversal.py 990B
neural_network
__init__.py 1KB
loss.py 2KB
activation.py 3KB
connection.py 4KB
network.py 11KB
convolutional_neural_network
__init__.py 2KB
layer.py 9KB
compute.py 10KB
function.py 4KB
operator.py 13KB
plugin.py 6KB
regularization.py 1KB
kernel
__init__.py 2KB
symbol.py 18KB
algebra.py 6KB
operator.py 28KB
engine.py 7KB
optimizer.py 9KB
共 56 条
- 1
资源评论
野生的狒狒
- 粉丝: 3393
- 资源: 2436
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功