if __name__ == '__main__': max_error = 0 for change_ordering in [False, True]: for kernel_size in [1, 3, 5, 7]: for padding in [0, 1, 3]: for stride in [1, 2, 3, 4]: # RuntimeError: invalid argument 2: pad should be smaller than half of kernel size, but got padW = 1, padH = 1, kW = 1, if padding > kernel_size / 2: continue model = LayerTest(kernel_size=kernel_size, padding=padding, stride=stride) model.eval() input_np = np.random.uniform(0, 1, (1, 3, 224, 224)) input_var = Variable(torch.FloatTensor(input_np)) torch.onnx.export(model, input_var, "_tmpnet.onnx", verbose=True, input_names=['test_in'], output_names=['test_out']) onnx_model = onnx.load('_tmpnet.onnx') k_model = onnx_to_keras(onnx_model, ['test_in'], change_ordering=change_ordering) error = check_torch_keras_error(model, k_model, input_np, change_ordering=change_ordering) print('Error:', error) if max_error < error: max_error = error print('Max error: {0}'.format(max_error))
import torch from torch.autograd import Variable from onnx2keras_custom import onnx_to_keras, check_torch_keras_error import onnx from torchvision.models.densenet import densenet121 if __name__ == '__main__': model = densenet121() model.eval() input_np = np.random.uniform(0, 1, (1, 3, 224, 224)) input_var = Variable(torch.FloatTensor(input_np), requires_grad=False) output = model(input_var) torch.onnx.export(model, (input_var), "_tmpnet.onnx", verbose=True, input_names=['test_in1'], output_names=['test_out']) onnx_model = onnx.load('_tmpnet.onnx') k_model = onnx_to_keras(onnx_model, ['test_in1', 'test_in2'], change_ordering=True) error = check_torch_keras_error(model, k_model, input_np, change_ordering=True) print('Max error: {0}'.format(error))