[已经验证], 需要根据网络模块修改
将tensorpack的inference改为pytorch_.pb转换为.pth_云端一散仙的博客-CSDN博客
将pb文件转为pth文件
- 相关的文件
1 | import torch |
模型代码
1 | class TextRecognition(nn.Module): |
Pytorch 与 TensorFlow 二维卷积(Conv2d)填充(padding)上的差异,写卷积层的时候遇到的坑。
这种差异是由 TensorFlow 和 Pytorch 在卷积运算时使用的填充方式不同导致的。Pytorch 在填充的时候,上、下、左、右各方向填充的大小是一样的,但 TensorFlow 却允许不一样。
参考博客1Pytorch 与 TensorFlow 二维卷积(Conv2d)填充(padding)上的差异 - 简书
参考博客2tensorflow与pytorch卷积填充方式的差异 - 简书
在AttentionLstm中,有一个LinearBias类,该类会将pack和self.lstm_b加起来,但是如果在forward中写成相加的形式,就不能将该self.lstm_b保存下来,写成类可以使模型加载参数的时候可以一次加载完成。
1 | class AttentionLstm(nn.Module): |
1 | pack = self.lstm_W(wemb_prev) + self.lstm_U(h_prev) + self.lstm_Z(attention_feature) # bs, 2048 |
原代码使用的大都是tensorflow的函数,所以要改成相应的pytorch的函数。
tensorflow | pytorch |
---|---|
tf.matmul | torch.matmul |
tf.multiply | torch.mul |
tf.sigmoid | torch.nn.Sigmoid |
tf.nn | .dropout torch.nn.Dropout |
tf.nn | .softmax torch.nn.Softmax |
tf.tanh | torch.tanh |
tf.split | torch.split |
tf.shape | torch.size |
tf.reshape | / tf.transpose torch.reshape / view |
tf.expand_dims | torch.unsqueeze |
tf.add_n | /tf.add torch.add |
tf.reduce_sum | torch.sum |
tf.reduce_mean | torch.mean |
tf.transpose | torch.permute |
tf.concat | torch.cat |
tf.nn | .embedding_lookup torch.index_select |
加载参数
最后加载参数验证
1 | net = attention_ocr_pytorch.TextRecognition() |
end
Sequence 使用Reshape
pytorch中没有nn.Reshape层,如果想使用 reshape 功能,通常:
1 | class Net(nn.Module): |
如果要想在 nn.Sequential 中使用 Reshape 功能,可以自定义Reshape层:
1 | class Reshape(nn.Module): |
然后就可以直接在nn.Sequential中使用Reshape功能了:
1 | nn.Sequential( |
原文链接:https://blog.csdn.net/d14665/article/details/112218767
Reference
pytorch 模型与tf模型转换_tf.cast如何用pytorch实现_zhurui_xiaozhuzaizai的博客-CSDN博客