层 Layer

Layer类是对网络中单独层的抽象,内聚的数据是习得参数,主要作用是包装function的计算功能,完成当前层习得参数的初始化和更新。

基类layer(name='layer')

初始化时,layer需要一个名字标识name,内建两个字典shape_dictparams,前者用于存储习得参数的维度,后者存储习得参数的值。

warmup(self, warmup_data)

layer类提供warmup()方法来推断习得参数的维度(_infer_shape())并将其初始化(_init_params()),这一过程在模型建立后被调用。

forward(self, input)grad(self, input, dout)

这两个方法分别完成当前层的前向计算和反向传播过程,是对function()的包装。

update(self, grads, optimizer, config)

update()方法是layer类的核心功能,其在完成反向传播后被调用,接收grad()方法得到的梯度、模型传来的优化器函数(optimizer)及其配置,对当前层内聚的习得参数进行一步更新。

目前支持的层

Linear(name="linear", output_shape=256)

Linear层即为全连接层,接收数据维度为(batch_size, X, Y, Z, .....),习得参数为权重w和偏置b

超参:

  • 输出维度output_shape

Conv(name='conv', filter=1, kernel_size=3, stride=1, pad=0)

Conv为卷积层,接收数据维度为(batch_size, channels, height, width),内聚的习得参数为卷积权重w(维度(filters, channels, kernel_size, kernel_size))和偏置b

超参:

  • 过滤器个数filter
  • 卷积核大小kernel_size
  • 步长stride
  • pad长度pad

Pool(name="pool", pool_height=2, pool_width=2, stride=2)

Pool层为极大下采样层,不含习得参数。

超参:

  • 采样高度pool_height
  • 采样宽度pool_width
  • 步长stride

ReLU(name='relu')Sigmoid(name='sigmoid')

ReLUSigmoid为非线性激活层,不含习得参数。

了解更多有关layer的作用,参见设计理念