alpha阶段前后端接口文档试用版

Posted nag2020

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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模块代码]
}

以上是关于alpha阶段前后端接口文档试用版的主要内容,如果未能解决你的问题,请参考以下文章

Scrum meeting 10

强大,腾讯开源前后端接口开发工具!

beta阶段第二次scrum meeting

团队Git现场编程实战

团队Git现场编程实战

深入浅出:了解前后端分离优势前后端接口联调以及优化问题