Exemplo n.º 1
0
def parse_deconv(json_param):
    params = {}
    params["name"] = json_param["name"]
    params["top"]  = json_param["top"][0]
    params["bot"]  = json_param["bottom"][0]
    params["type"] = "deconv"

    json_conv_param = json_param["convolution_param"]
    params["additive_conv"] = False

    if "pad" in json_conv_param:
        params["pad"]     = json_conv_param["pad"]
    else:
        params["pad"]     = [0, 0, 0]

    params["stride"]  = json_conv_param["stride"]
    
    params["ofm"] = json_conv_param["num_output"]

    if "group" in json_conv_param:
        params["group"] = json_conv_param["group"]
        assert (params["group"] == 1 or params["group"] == params["ofm"])

    params["json_kernel_size"] = json_conv_param["kernel_size"]
    params["kernel"] = "{}_kernel".format(params["name"])
    params["bias"]   = "{}_bias".format(params["name"])

    params["bias_dim"] = [params["ofm"]]
    params["bias_size"] = round_to_simd(params["bias_dim"][0])
    params["scale_size"] = round_to_simd(params["ofm"]) 

    params["scale"] = "{}_scale".format(params["name"])

    return params
Exemplo n.º 2
0
    def h5ker_to_znnphiker(ifm, ofm, kz, kx, ky):
        total_ifms = round_to_simd(kdim[0])
        total_ofms = round_to_simd(kdim[1])

        offset = ofm/S
        offset *= total_ifms/S
        offset += ifm/S
        offset *= kdim[2]
        offset += kz
        offset *= kdim[3]
        offset += kx
        offset *= kdim[4]
        offset += ky
        offset *= S
        offset += ifm % S
        offset *= S
        offset += ofm % S
        return offset
Exemplo n.º 3
0
def set_deconv_dim(params, bot_tensor):
    params["bn"]  = bot_tensor.dim[0]
    params["ifm"] = bot_tensor.dim[1]
    params["id"]  = bot_tensor.dim[2]
    params["ihw"] = bot_tensor.dim[3]

    params["kernel_dim"]  = [params["ifm"], params["ofm"]]
    params["kernel_dim"] += params["json_kernel_size"]

    params["kernel_size"]  = params["kernel_dim"][2] * params["kernel_dim"][3] * params["kernel_dim"][4]
    params["kernel_size"] *= round_to_simd(params["kernel_dim"][0])
    params["kernel_size"] *= round_to_simd(params["kernel_dim"][1])

    top_dim = [-1, -1, -1, -1, -1]
    top_dim[0] = bot_tensor.dim[0]
    top_dim[1] = params["ofm"]
    for i in [2, 3, 4]:
	top_dim[i]  = params["stride"][i - 2] * (bot_tensor.dim[i] - 1)
        top_dim[i] += params["kernel_dim"][i] - 2*params["pad"][i - 2]

    params["top_dim"] = top_dim
    params["bot_dim"] = bot_tensor.dim
Exemplo n.º 4
0
def parse_conv(json_param):
    params = {}
    params["name"] = json_param["name"]
    params["top"] = json_param["top"][0]
    params["bot"] = json_param["bottom"][0]
    params["type"] = "conv"

    json_conv_param = json_param["convolution_param"]

    if "pad" in json_conv_param:
        params["pad"] = json_conv_param["pad"]
    else:
        params["pad"] = [0, 0, 0]
    params["out_pad"] = [0, 0, 0]

    params["stride"] = json_conv_param["stride"]

    params["ofm"] = json_conv_param["num_output"]

    params["json_kernel_size"] = json_conv_param["kernel_size"]
    params["kernel"] = "{}_kernel".format(params["name"])
    params["bias"] = "{}_bias".format(params["name"])

    params["bias_dim"] = [params["ofm"]]
    params["bias_size"] = round_to_simd(params["bias_dim"][0])

    params["activation"] = None

    params["additive_conv"] = False
    params["scale"] = "{}_scale".format(params["name"])
    params["scale_size"] = round_to_simd(params["ofm"])
    params["scale_data"] = None

    params["cores"] = 2
    params["ht"] = 2
    return params