def model_save()

in #U57fa#U7840#U6559#U7a0b/A2-#U795e#U7ecf#U7f51#U7edc#U57fa#U672c#U539f#U7406/#U7b2c6#U6b65 - #U6a21#U578b#U90e8#U7f72/src/ch13-ModelInference/ONNXConverter/save.py [0:0]


def model_save(numpy_model, save_path):
    assert type(numpy_model) == list
    os.makedirs(save_path, exist_ok = True)
    model = {}
    index = 0
    for (index,layer) in enumerate(numpy_model):
        if layer.type == "FC":
            model[index] = {
                "type":"FC",
                "input_name":layer.input_name,
                "input_size":layer.input_size,
                "weights_name":layer.weights_name,
                "weights_path":os.path.join(save_path, layer.weights_name + ".npy"),
                "bias_name":layer.bias_name,
                "bias_path":os.path.join(save_path, layer.bias_name + ".npy"),
                "output_name":layer.output_name,
                "output_size":layer.output_size
            }

            np.save(os.path.join(save_path, layer.weights_name + ".npy"), layer.weights)
            np.save(os.path.join(save_path, layer.bias_name + ".npy"), layer.bias)

        elif layer.type == "Conv":
            model[index] = {
                "type":"Conv",
                "input_name":layer.input_name,
                "input_size":layer.input_size,
                "weights_name":layer.weights_name,
                "weights_path":os.path.join(save_path, layer.weights_name + ".npy"),
                "bias_name":layer.bias_name,
                "bias_path":os.path.join(save_path, layer.bias_name + ".npy"),
                "output_name":layer.output_name,
                "output_size":layer.output_size,
                "kernel_shape":[layer.kernel, layer.kernel],
                "strides":[layer.stride, layer.stride],
                "pads":[layer.pad, layer.pad, layer.pad, layer.pad]
            }

            np.save(os.path.join(save_path, layer.weights_name + ".npy"), layer.weights)
            np.save(os.path.join(save_path, layer.bias_name + ".npy"), layer.bias)
        
        elif layer.type == "Relu" or layer.type == "Softmax" or layer.type == "Sigmoid" or layer.type == "Tanh":
            model[index] = {
                "type":layer.type,
                "input_name":layer.input_name,
                "input_size":layer.input_size,
                "output_name":layer.output_name,
                "output_size":layer.output_size
            }
        
        elif layer.type == "MaxPool":
            model[index] = {
                "type":layer.type,
                "input_name":layer.input_name,
                "input_size":layer.input_size,
                "output_name":layer.output_name,
                "output_size":layer.output_size,
                "kernel_shape":[layer.kernel, layer.kernel],
                "pads":[layer.pad, layer.pad, layer.pad, layer.pad]
            }
        
        elif layer.type == "Reshape":
            model[index] = {
                "type":layer.type,
                "input_name":layer.input_name,
                "output_name":layer.output_name,
                "shape":layer.shape
            }
        
    
    with open(os.path.join(save_path, "model.json"), "w") as f:
        json.dump(model, f)

    return True