Tensorflow 张量流的Pytorch等价物

Tensorflow 张量流的Pytorch等价物,tensorflow,machine-learning,pytorch,Tensorflow,Machine Learning,Pytorch,我正试图在Pytorch中跟踪此代码。我已经试了好几天了,但阅读张量流文档和PyTorch文档让我完全困惑 input_data = Input(shape=(256, 64, 1), name=‘input’) inner = Conv2D(32, (3, 3), padding=‘same’, name=‘conv1’, kernel_initializer=‘he_normal’)(input_data) inner = BatchNormalization()(inner) inner

我正试图在Pytorch中跟踪此代码。我已经试了好几天了,但阅读张量流文档和PyTorch文档让我完全困惑

input_data = Input(shape=(256, 64, 1), name=‘input’)

inner = Conv2D(32, (3, 3), padding=‘same’, name=‘conv1’, kernel_initializer=‘he_normal’)(input_data)
inner = BatchNormalization()(inner)
inner = Activation(‘relu’)(inner)
inner = MaxPooling2D(pool_size=(2, 2), name=‘max1’)(inner)

inner = Conv2D(64, (3, 3), padding=‘same’, name=‘conv2’, kernel_initializer=‘he_normal’)(inner)
inner = BatchNormalization()(inner)
inner = Activation(‘relu’)(inner)
inner = MaxPooling2D(pool_size=(2, 2), name=‘max2’)(inner)
inner = Dropout(0.3)(inner)

inner = Conv2D(128, (3, 3), padding=‘same’, name=‘conv3’, kernel_initializer=‘he_normal’)(inner)
inner = BatchNormalization()(inner)
inner = Activation(‘relu’)(inner)
inner = MaxPooling2D(pool_size=(1, 2), name=‘max3’)(inner)
inner = Dropout(0.3)(inner)

CNN to RNN
inner = Reshape(target_shape=((64, 1024)), name=‘reshape’)(inner)
inner = Dense(64, activation=‘relu’, kernel_initializer=‘he_normal’, name=‘dense1’)(inner)

RNN
inner = Bidirectional(LSTM(256, return_sequences=True), name = ‘lstm1’)(inner)
inner = Bidirectional(LSTM(256, return_sequences=True), name = ‘lstm2’)(inner)

OUTPUT
inner = Dense(num_of_characters, kernel_initializer=‘he_normal’,name=‘dense2’)(inner)
y_pred = Activation(‘softmax’, name=‘softmax’)(inner)

model = Model(inputs=input_data, outputs=y_pred)
我试着在Pytorch中一点一点地跟踪它

class Net(nn.Module):
def init(self):
super(Net,self).init()
self.input_data = input_size
self.conv1 = nn.Conv2d(32,3,3)
self.conv2 = nn.Conv2d(64,3,3)
self.conv3 = nn.Conv2d(128,3,3)


self.dropout = nn.Dropout(0.3)
self.maxp = torch.nn.MaxPool2d((2,2))


#CNN to RNN
self.linear1 = nn.Linear(256*62*62,64)

#RNN
self.lstm = torch.nn.LSTM(256, 10,bidirectional = True)

#output
self.linear2 = nn.Linear(64,num_of_chars)

def forward(self,x,input_size):
    
     
    x = self.conv1(input_size)
    x = nn.BatchNorm2d(x)
    x = F.relu(x)
    x = self.maxp(x)
    x = self.conv2(x)
    x = nn.BatchNorm2d(x)
    x = F.relu(x)
    x = self.maxp(x)
    x = self.dropout(x)
    x = self.conv3(x)
    x = nn.BatchNorm2d(x)
    x = F.relu(x)
    x = self.maxp(x)
    x = self.dropout(x)
    x = x.view((64,1024))
    x = self.linear1(x)
    
    x = self.lstm(x)
    x = self.lstm(x)
    
    x = self.linear2(x)
    x = nn.Softmax(x,dim=1)
    return x

但模型摘要完全不同。我被这些参数弄糊涂了。任何帮助都将不胜感激。如果你需要什么,告诉我。谢谢

你不明白的是什么?神经网络是一个操作链;通过某种操作,每一层都是前一层的图像。这转化为一个代码中的
inner=Activation('relu')(inner)
,另一个代码中的
x=F.relu(x)
。我很难理解输入数据是如何工作的,也就是说,如果它们的输入=输入(shape=(256,64,1),那么我应该执行x=x.view(256,64,1)或者别的什么。同样,在他们的例子中,lstm工作正常,在Pytorch中它要求隐藏的dim!。或多或少我被图层的形状和图像弄糊涂了。什么是形状弄糊涂了?你能举一个小得多的网络的例子吗?当前的一个有20个函数一个接一个地链接起来。我建议尝试使用3 fu开始是nctions,当你不那么困惑的时候,继续到20。你实际上没有问任何问题!你发布了一个相当长的代码和一个相当长的,应该是等效的代码,然后说你困惑了。好的,需要一些时间来弄清楚