我想使用循环实现卷积层,这是最重要的事情。我需要考虑:输入特征映射的数量,特征映射的通道(宽度X高度X 3通道)。内核:(内核的数量,K,K)和卷积的步幅以及特征映射的数量。使用循环我有很多问题要做。我需要一个带索引关系的伪代码。感谢。
conv_layer(W=0,H=0,K=0,M=0,D=0,s=0,output=0,input_imm=0,filter_w=0,print_dot=False,fileout=''):
#Parameters:
#Feature map Width,heigth
#kernel dim K x K
#M: number of filters
#D: depth or channel
#s: stride
#print_dot: True if you want to write the .dot file
#Return: A data flow graph of the net G.nx and
OFW=(((W-K)/s)+1)
test= OFW*OFW
OFH=OFW
OFM=M
IFM=D
KH=K
KW=K
#All zero multidim arrays
output = np.zeros((OFM,OFH,OFW))
input_imm=np.zeros((IFM,s*OFH+KH,s*OFW+KW))
filter_w=np.zeros((OFM,IFM,KH,KW))
#multi direction graph
G=nx.MultiDiGraph()
G1=nx.MultiDiGraph()
#mac counter
mac_id=0;
#loops
for ofm in range(0,OFM):
for ifm in range(0,IFM):
for ofh in range(0,OFH):
for ofw in range(0,OFW):
for kh in range(0,KH):
for kw in range(0,KW):
output[ofm,ofh,ofw]=input_imm[ifm,s*ofh +kh,s*ofw +kw]* filter_w[ofm,ifm,kh,kw]