alpha阶段前后端接口文档试用版
alpha阶段前后端接口文档
功能说明:前端有若干个模块,包括神经网络层和经典模型可供用户选择,用户根据这些模块来搭建模型。
static里面是需要用户指定的全局变量。
一个数组,每个数组元素对应用户所连接的 一条边,同时记录了两个端点的字段信息,还附加了一个区别于其他端点的id字段和 代表该端点是否是根节点的字段。 (2)调用方法:调用/VisualPytorch/VisualPytorch/ops.py下的main_func(edge_record) 即可,其中,edge_record为(1)中前端传给后端的数据,该函数的返回值为三个字 符串数组,依次为main.py,model.py,ops.py的内容。
只涉及到两种输入方式,包括表单输入类型以及选项类型,与之前相同。
关于输入的词法合法性由前端解决,而语法合法性由后端
例如shape(string),合法输入为 : 2,2
如果输入3?3则前端报错
如果输入与前一个网络层的输出不匹配,则由后端报错
每个参数规范如下
以in_channel(int):输入通道数 非0正数
in_channel为json格式中对应的attribute名
int为数据类型
输入通道数为对应的中文含义,可以忽略也可以在前端中给出
非0正数为对输入数据的要求,如果不符合应在前端报错
Structure部分规范
一、神经网络层及其参数:
1、view_layer:reshape层(与之前保持相同)
view_layer为json中name,reshape层为网页中显示的名字,下同
参数类型:
shape(string)
用户可以输入多个数字,包括所有非负整数和-1(只有-1是例外),同维度数字之间以英文的“,”分开,例如1,2,3,4,5
2、linear_layer:全连接层(与之前保持相同)
参数类型:
in_channel(int):输入通道数 要求为非0正数
out_channel(int):输入通道数 要求为非0正数
3、conv_layer卷积层(删除了之前的1维/2维卷积层)
参数类型:
layer_type:下拉框二选一,conv/conv_transpose
conv和conv_transpose参数相同
type:下拉框三选一,选项包括1d/2d/3d
in_channel(int):输入通道数 非0正数
out_channel(int):输出通道数 非0正数
kernel_size (int) : 卷积核的尺寸 非零正数
stride (int) : 卷积步长 非零正数
padding (int) : 补充0的层数 非负整数
4、element_wise_add_layer:元素级相加层(与之前保持相同)
无参数
5、concatenate_layer:channel维度拼接层(与之前保持相同)
参数类型:
dim(int):拼接维度 非0正数
6、pool_layer:最大池化层(新增,从卷积层分离)
参数类型:
layer_type:下拉框三选一,选项包括max_Pool/avg_Pool/max_Unpool
max_pool参数:
type:下拉框三选一,选项包括1d/2d/3d
kernel_size (int) : 卷积核的尺寸 非0正数
stride (int) : 卷积步长 非0正数
padding (int) : 补充0的层数 非负整数
avg_pool参数:
type:下拉框三选一,选项包括1d/2d/3d
kernel_size (int) : 卷积核的尺寸 非0正数
stride (int) : 卷积步长 非0正数
padding (int) : 补充0的层数 非负整数
ceil_mode:下拉框二选一,ceil/floor
count_include_pad:下拉框二选一,true/false
max_unpool参数:
type:下拉框三选一,选项包括1d/2d/3d
kernel_size (int) : 卷积核的尺寸 非0正数
stride (int) : 卷积步长 非0正数
7、activation_layer激活层(新增,从卷积层分离)
参数类型:
layer_type:下拉框,包括relu/sigmoid/tanh/leaky relu/elu
对不同layer_type的参数
relu:无参数
sigmoid:无参数
tanh:无参数
leaky relu:negative_slope(double) 非0正实数
elu:angle(double) 非0正实数
8、softmax_layer:softmax层(新增,从卷积层分离)
参数类型:
dim(int):计算维度 非0正数
9、RNN_layer:递归神经网络(新增网络层)
参数类型:
input_size(int):输入特征数 非0正数
hidden_size(int):隐藏层个数 非0正数
num_layers(int):递归层层数 非0正数
nonlinearity:二选一,tanh/relu
10、LSTM_layer:长周期神经网络(新增网络层)
参数类型:
input_size(int):输入特征数 非0正数
hidden_size(int) :隐藏层个数 非0正数
num_layers(int):递归层层数 非0正数
11、norm_layer:标准化层(新增网络层)
参数类型:
layer_type:下拉框,选项包括batch_norm/group_norm/instance_norm
batch_norm参数:
type:下拉框,包括1d/2d/3d
num_features(int):输入特征数 非0正数
group_norm参数:
num_groups(int):input_channel分组数 非0正数
num_channel(int):input_channel个数 非0正数
instance_norm参数:
type:下拉框,包括1d/2d/3d
num_features(int):输入特征数 非0正数
12、dropout_layer:dropout层(新增网络层)
参数类型:
type:下拉框,包括1d/2d/3d
p(int):置0概率 0-1范围内实数(包括0和1)
13、
二、static参数
1、epoch(int):全数据集训练次数 非0正数
2、learning_rate(double):学习率 大于0的实数
3、learning_rate_scheduler:学习率下降 ,下拉框,共包括StepLR, MultiStepLR, ExponentialLR, CosineAnnealingLR,None
stepLR参数:
step_size(int):衰减周期 非0正数
gamma(int):衰减幅度 非0正数
MultiStepLR参数:
milestones(string):衰减时间点
用户可以输入多个数字,包括所有非负整数,同维度数字之间以英文的“,”分开,例如1,2,3,4,5
gamma(int):衰减幅度 非0正数
ExponentialLR参数:
gamma(int):衰减幅度 非0正数
CosineAnnealingLR参数:
T_max(int):迭代次数 非0正数
eta_min(double):最小学习率 大于0实数
4、batch_size(int):每次训练个数 非0正数
5、optimizer:优化器 下拉框,共包含SGD,Momentum,RmsProp,Adam,Adamax,ASGD
6、dataset:训练数据集 下拉框,共包含mnist,cifar10,stl10,svhn,jena,glove
7、ifshuffle:是否打乱数据集 勾选框,默认为勾选,在json中为true,否则为false
8、platform:运行平台 下拉框,共包含CPU/GPU
9、loss_func:损失函数 下拉框,共包含MSELoss,CrossEntrophyLoss,L1Loss,NLLLoss,BCELoss
三、经典模型选择
1、Lenet
conv_2d->relu->maxpool2d->conv_2d->relu->maxpool2d->linear->relu->linear->relu->linear
(仅作为说明模型结构,无意义,下同)
2、Alexnet
features->classfier
features:conv_2d->relu->maxpool2d->conv2d->relu->maxpool2d->conv2d->relu->conv2d->relu->conv2d->relu->maxpool2d
classfier:linear->relu->linear->relu->linear
3、NIN
conv2d->relu->conv2d->relu->conv2d->relu
这三类模型作为Sequential提前存储,可直接调用,即
对应的feature中name固定为Lenet/Alexnet/NIN,attribute根据对应结构预先编写
四、输入的json格式(structure中)
共包括2种json结构,包括网络模型json结构:feature,和static变量json结构:data
只有生成代码(gen_code)时需要向后端传送data结构,其他任何关于模型的操作只要用到feature结构
(即把static变量和神经网络模型分离)
对于type为Sequential的结构,表示嵌套模型
name:对于最终保存的模型,为用户保存时给出的模型名/对于中间结构的嵌套模型,name可以缺省
attribute:表示嵌套模型内部各个模型的具体属性(包括内部的嵌套模型和base模型)
nets_conn:表示内部模型连接情况
对于type为base的结构,表示单个网络层
name:表示所属那种网络层,如linear_layer/pool_layer等
attribute:表示网络层属性,如in_channel,out_channel等
nets_conn(base类没有该种结构)
"feature":{ "canvas_%d":#网络层结构唯一id { "type": "Sequential"|"base", #Sequential表示嵌套模型,base表示单个网络层 "name": "ABCD", #对于Sequential为用户在保存网络层时为网络层取的名字 #对于base层为网络层对应的名字, #对于中间的Sequential(即只作为保存网络结构一部分 例如最终生成结构D=A+B+C中的非base #A B C),name可以缺省 "start":"canvas_%d"#表示每个Sequential开始节点,即入度为0的节点。如果实现困难可以暂缓给出该属性 "attribute":{#对于Sequential attribute的结构 "nets":{ "canvas_%d": { "type": "name": "attribute":{ } }, "canvas_%d": { "type": "name": "attribute":{ } }, }, "attribute":{#对于base attribute的结构,以pool_layer为例 "layer_type": "type": "kernel_size": "stride": "padding": "left":"XXXpx",#绘制时的位置,Sequential可缺省该属性 "Right":"XXXpx"#绘制时的位置,Sequential可缺省该属性 } "nets_conn":[ #描述每个Sequential内部的连通情况,base层没有该属性 { "source":{ id:"canvas_%d", anchor_position:("Bottom"/"Up"/"Left"/"Right"), #对于type=base表示箭头连接位置,对于Sequential可缺省 }, "target":{ id:"canvas_%d", anchor_position:("Bottom"/"Up"/"Left"/"Right"), #对于type=base表示箭头连接位置,对于Sequential可缺省 } } ], } } } data: { "static":{ ”变量名”:“变量值”, } }
举个例子
对于以下结构
对应生成的json文件为:
feature:{ "canvas_1":{ "type":"Sequential", "name":"model3", "start":"canvas_2", "attribute":{ "canvas_2":{ "type":"Sequential", "name":"model1", “start":"canvas_3", "attribute":{ "canvas_3":{ "type":"base", "name":"linear_layer", "attribute":{ "in_channel":"", "out_channel":"" } } "canvas_4":{ "type":"base", "name":"conv_layer", "attribute":{ "type": "in_channel": "out_channel": "kernel_size": "stride": "padding": } } } "nets_conn":[ "source":{ "id":"canvas_3", "anchor_position":"bottom"#箭头连接位置 } "target":{ "id":"canvas_4", "anchor_position":"up"#箭头连接位置 } ] } "canvas_5":{ "type":"Sequential", "name":"model2", "start":"canvas_6", "attribute":{ "canvas_6":{ "type":"base", "name":"pool_layer", "attribute":{ #pool的具体参数 } } "canvas_7":{ "type":"base", "name":"softmax_layer", "attribute":{ #softmax层具体参数 } } } "nets_conn":[ "source":{ "id":"canvas_6", "anchor_position":"bottom"#箭头连接位置 } "target":{ "id":"canvas_7", "anchor_position":"up"#箭头连接位置 } ] } } "nets_conn":[ "source":{ "id":"canvas_2", "anchor_position":"bottom"#对于Sequential而言没有意义,可缺省 } "target":{ "id":"canvas_5", "anchor_position":"up" #对于Sequential而言没有意义,可缺省 } ] } } data:{ static:{ "static变量名": "具体值": } }
二、网络模型接口
1、NetworkList类
(1)获得存储的模型
字段 | 内容 |
---|---|
http请求类型 | GET |
url | [ip]/api/NeuralNetwork/network/ |
status(success) | 200 |
status(failure) | 400 |
返回值示例
[ { "id": 100, "creator": -1, "feature": {模型结构}, "time": "2019-04-18T07:35:43.036087Z" }, { "id": 101, "creator": -1, "feature": {模型结构}, "time": "2019-04-18T07:35:48.066113Z" } ]
(2) 保存模型
字段 | 内容 |
---|---|
http请求类型 | POST |
url | [ip]/api/NeuralNetwork/network/ |
status(success) | 201 |
status(failure) | 400 |
data字段
{ "creator":[用户令牌,未登录默认为-1], "feature":[模型结构] }
2、NetworkDetail类
该类用于对后端已存储的网络模型进行一些细节操作。
(1)根据id获取模型
字段 | 内容 |
---|---|
http请求类型 | GET |
url | [ip]/api/NeuralNetwork/network/[id]/ |
status(success) | 200 |
status(failure) | 400 |
返回值示例
{ "id": 101, "creator": -1, "feature":[模型结构], "time": "2019-04-18T07:35:48.066113Z" }
(2)根据id修改模型
字段 | 内容 |
---|---|
http请求类型 | PUT |
url | [ip]/api/NeuralNetwork/network/[id]/ |
status(success) | 200 |
status(failure) | 400 |
data字段
{ "creator":[用户令牌,未登录默认为-1], "feature":[模型结构] }
(3)根据id删除模型
字段 | 内容 |
---|---|
http请求类型 | DELETE |
url | [ip]/api/NeuralNetwork/network/[id]/ |
status(success) | 200 |
status(failure) | 400 |
3、代码生成接口
字段 | 内容 |
---|---|
http请求类型 | POST |
url | [ip]/api/NeuralNetwork/getcode/ |
status(success) | 200 |
status(failure) | 400 |
data字段
{ "creator":[用户令牌,未登录默认为-1], "feature":[模型结构], "data":[static变量] }
返回值
{ "Main":[Main模块代码], "Model":[Model模块代码], "Ops":[Ops模块代码] }