我有一个.t7文件,其中保存了网络体系结构和预先训练的权重。由于该模型是在Lua上训练的,并且需要nn和cudnn(由于我没有NVIDIA GPU而无法安装),因此我试图将所有内容转换为Keras / TensorFlow。
读取文件后,我有一个torchfile.TorchObject,在我的情况下是nn.Sequential火炬类型的对象,所有图层都是nn.layer或cudnn.layer。
假设我将.t7文件加载到名为readFile的变量中: readFile。 dir ()返回
[b'_type', b'output', b'gradInput', b'modules', b'train', 'torch_typename']
(b应该来自torchfile包,它不影响任何内容。)
readFiles.modules是TorchObject的列表,每个都有一些属性,例如:
[b'padW',
b'pad',
b'nInputPlane',
b'output',
b'gradInput',
b'iSize',
b'fgradInput',
b'_type',
b'gradBias',
b'bias',
b'output_slice',
b'stride',
b'benchmarked',
b'dH',
b'dW',
b'output_offset',
b'padH',
b'kH',
b'weight_offset',
b'finput',
b'input_slice',
b'input_offset',
b'weight',
b'train',
b'gradWeight',
b'groups',
b'kW',
b'nOutputPlane',
b'autotunerHash',
'torch_typename']
torch.load()对我不起作用,因此我从torchfile包中使用了torchfile.load(),该文件将.t7文件读取到TorchObject中,可以在python笔记本中查询打印。
print(readFile.torch_typename())
for node in step1.modules:
print(" "+str(node.torch_typename()))
if(type(node.modules) == list):
for node2 in node.modules:
print(" "+str(node2.torch_typename()))
if(type(node2.modules) == list):
for node3 in node2.modules:
print(" "+str(node3.torch_typename()))
打印出的网络结构为:(省略了某些图层,带有'...')
b'nn.Sequential'
b'cudnn.SpatialConvolution'
b'cudnn.SpatialBatchNormalization'
b'cudnn.ReLU'
b'cudnn.SpatialMaxPooling'
b'nn.Sequential'
b'nn.Sequential'
b'nn.ConcatTable'
b'nn.CAddTable'
b'cudnn.ReLU'
...
b'cudnn.SpatialFullConvolution'
b'cudnn.SpatialBatchNormalization'
b'cudnn.ReLU'
...
如何使用所有这些属性规范将所有预训练的权重(作为Numpy数组)提供给TensorFlow / Keras层? 如何重新创建相同的结构?