python 层
一、 没有反向传播
例如:
def mul_ab(inputs, outputs):
num_blobs = int(len(inputs)/2)
for i in range(num_blobs): # range(x), x must be integer
i = int(i) # inputs 的坐标必须是整形
outputs[i].reshape(inputs[i].shape) # reshape output
input0 = inputs[i].data
input1 = inputs[i+num_blobs].data
result = np.zeros(input0.shape, dtype=type(input0))
result = input0 * input1
outputs[i].data[...] = result # Assigning variables
调用:
model.net.Python(mul_ab)(blobs_in+obj_pred_blobs, blobs_multi)
其中, blobs_in(inputs) 必须是一个列表,列表元素必须是blob
此函数实现的是乘法,A×B, A: (N, C, H, W) B:(N, 1, H, W),没有反向传播,因此需要在模型创建时:
for b in blobs_multi:
model.StopGradient(b, b)
return blobs_multi