def construct_small_network_weights(input, dqn_numbers, dqn_max_number, frame_history, num_actions):
    input = tf.image.convert_image_dtype(input, tf.float32)
    with tf.variable_scope('c1'):
        c1 = th.down_convolution_weights(input, dqn_numbers, dqn_max_number, 5, 5, frame_history, 16, leaky_relu)
    with tf.variable_scope('c2'):
        c2 = th.down_convolution_weights(c1, dqn_numbers, dqn_max_number, 5, 5, 16, 4, leaky_relu)
        N = np.prod([x.value for x in c2.get_shape()[1:]])
        c2 = tf.reshape(c2, [-1, N])
    with tf.variable_scope('fc1'):
        fc1 = th.fully_connected_weights(c2, dqn_numbers, dqn_max_number, 15, leaky_relu)
    with tf.variable_scope('fc2'):
        q_values = th.fully_connected_weights(fc1, dqn_numbers, dqn_max_number, num_actions, lambda x: x)
    return q_values
def construct_q_network_weights(input, dqn_numbers, dqn_max_number, frame_history, num_actions):
    input = tf.image.convert_image_dtype(input, tf.float32)
    with tf.variable_scope('c1'):
        c1 = th.down_convolution_weights(input, dqn_numbers, dqn_max_number, 8, 4, frame_history, 32, tf.nn.relu)
    with tf.variable_scope('c2'):
        c2 = th.down_convolution_weights(c1, dqn_numbers, dqn_max_number, 4, 2, 32, 64, tf.nn.relu)
    with tf.variable_scope('c3'):
        c3 = th.down_convolution_weights(c2, dqn_numbers, dqn_max_number, 3, 1, 64, 64, tf.nn.relu)
        N = np.prod([x.value for x in c3.get_shape()[1:]])
        # N = tf.reduce_prod(tf.shape(c3)[1:4])
        # N = []
        c3 = tf.reshape(c3, [-1, N])
    with tf.variable_scope('fc1'):
        fc1 = th.fully_connected_weights(c3, dqn_numbers, dqn_max_number, 512, tf.nn.relu)
    with tf.variable_scope('fc2'):
        q_values = th.fully_connected_weights(fc1, dqn_numbers, dqn_max_number, num_actions, lambda x: x)
    return q_values