我正在尝试用numpy实现递归神经网络。
我当前的输入和输出设计如下:
x
形状:(序列长度、批量大小、输入尺寸)
小时
:(层数、方向数、批量大小、隐藏大小)
初始重量
:(方向数,2*隐藏大小,输入大小+隐藏大小)
重量
:(层数-1,方向数,隐藏大小,方向*隐藏大小+隐藏大小)
偏差
:(层数、方向数、隐藏大小)
我已经查找了RNN的pytorch API作为参考(https://pytorch.org/docs/stable/nn.html?highlight=rnn#torch.nn.rnn),但略有更改,将初始重量作为输入。(输出形状应该与pytorch中的相同)
当它运行时,我无法确定它是否运行正常,因为我正在输入随机生成的数字作为输入。
特别是,我不太确定我的输入形状是否设计正确。
有专家能给我指点迷津吗?
def-rnn(xs,h,w0,w=无,b=无,num_layers=2,非线性='tanh',辍学=0.0,双向=假,训练=真):num_directions=2,如果是双向else 1batch_size=xs.shape[1]input_size=xs.shape[2]hidden_size=h.shape[3]hn=[]y=[无]*len(xs)对于范围内的l(num_layers):对于范围内的d(num_directions):如果l==0和d==0:wi=w0[d,:hidden_size,:input_size]。T型wh=w0[d,隐藏大小:,输入大小:]。T型wi=np.重塑(wi,(1,)+wi.形状)wh=np.重塑(wh,(1,)+wh.形状)其他:wi=w[max(l-1,0),d,:,:hidden_size]。T型wh=w[最大值(l-1,0),d,:,hidden_size:]。T型对于枚举(xs)中的i,x:如果l==0和d==0:ht=np.tanh(np.dot(x,wi)+np.dotht=np.reform(ht,(batch_size,hidden_size))#否则,shape为(bs,1,hs)其他:ht=np.tanh(np.dot(y[i],wi)+np.doty[i]=hthn.附录(ht)y=np.a阵列(y)y=np.重塑(y,y.shape+(1,))返回np.asaray(y),np.asarray(hn)