def build_ban(num_token, v_dim, num_hid, num_ans, op='', gamma=4, reasoning=False):
    w_emb = WordEmbedding(num_token, 300, 0.0, op)
    q_emb = QuestionEmbedding((300 if ('c' not in op) else 600), num_hid, 1, False, 0.0)
    if (not reasoning):
        v_att = BiAttention(v_dim, num_hid, num_hid, gamma)
    else:
        v_att = BiAttention(v_dim, num_hid, num_hid, 1)
    b_net = []
    q_prj = []
    c_prj = []
    objects = 36
    for i in range(gamma):
        b_net.append(BCNet(v_dim, num_hid, num_hid, None, k=1))
        q_prj.append(FCNet([num_hid, num_hid], '', 0.2))
        c_prj.append(FCNet([(objects + 1), num_hid], 'ReLU', 0.0))
    classifier = SimpleClassifier(num_hid, (num_hid * 2), num_ans, 0.5)
    counter = Counter(objects)
    if (not reasoning):
        return BanModel(w_emb, q_emb, v_att, b_net, q_prj, c_prj, classifier, counter, op, gamma, num_hid)
    else:
        return BanModel_Reasoning(w_emb, q_emb, v_att, b_net, q_prj, c_prj, classifier, counter, op, gamma, num_hid)
def build_ban(num_token, v_dim, num_hid, num_ans, op=, gamma=4, reasoning=False):
    w_emb = WordEmbedding(num_token, 300, 0.0, op)
    q_emb = QuestionEmbedding((300 if ('c' not in op) else 600), num_hid, 1, False, 0.0)
    if (not reasoning):
        v_att = BiAttention(v_dim, num_hid, num_hid, gamma)
    else:
        v_att = BiAttention(v_dim, num_hid, num_hid, 1)
    b_net = []
    q_prj = []
    c_prj = []
    objects = 36
    for i in range(gamma):
        b_net.append(BCNet(v_dim, num_hid, num_hid, None, k=1))
        q_prj.append(FCNet([num_hid, num_hid], , 0.2))
        c_prj.append(FCNet([(objects + 1), num_hid], 'ReLU', 0.0))
    classifier = SimpleClassifier(num_hid, (num_hid * 2), num_ans, 0.5)
    counter = Counter(objects)
    if (not reasoning):
        return BanModel(w_emb, q_emb, v_att, b_net, q_prj, c_prj, classifier, counter, op, gamma, num_hid)
    else:
        return BanModel_Reasoning(w_emb, q_emb, v_att, b_net, q_prj, c_prj, classifier, counter, op, gamma, num_hid)