コード例 #1
0
def conv_layer_2conv(prev_layer, layer_depth, is_training=False):
    conv_layer1 = tf.layers.conv2d(
        prev_layer,
        layer_depth, [3, 3],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    conv_layer1_bn = tf.layers.batch_normalization(conv_layer1,
                                                   training=is_training)
    conv_layer1_out = tf.nn.relu(conv_layer1_bn)

    conv_layer2 = tf.layers.conv2d(
        conv_layer1_out,
        layer_depth, [3, 3],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    conv_layer2_bn = tf.layers.batch_normalization(conv_layer2,
                                                   training=is_training)
    conv_layer2_out = tf.nn.relu(conv_layer2_bn)

    pool_layer2 = tf.layers.max_pooling2d(conv_layer2_out, [2, 2],
                                          strides=2,
                                          padding='same')
    return pool_layer2, conv_layer2_out
コード例 #2
0
def basic_block(x,
                num_channel,
                kernel_size,
                stride,
                is_training,
                scope,
                padding='same'):
    # Shortcut connection
    in_channel = x.get_shape().as_list()[-1]
    with tf.variable_scope(scope):
        if in_channel == num_channel:
            if stride == 1:
                shortcut = tf.identity(x)
            else:
                shortcut = tf.nn.max_pool(x, [stride, stride],
                                          stride,
                                          padding='same')
        else:
            # Considering maxpooling if stride > 1
            shortcut = tf.layers.conv2d(x,
                                        num_channel,
                                        1,
                                        strides=stride,
                                        padding='same',
                                        activation=None,
                                        name='dimension_reduction',
                                        use_bias=False,
                                        kernel_initializer=he_normal())
            # shortcut = tf.layers.batch_normalization(
            #     shortcut, momentum=0.9, training=is_training,
            #     name='shortcut_bn'
            # )

        x = conv_bn_relu(x,
                         num_channel,
                         kernel_size,
                         stride,
                         is_training=is_training,
                         scope='conv_bn_relu',
                         padding=padding)
        x = tf.layers.conv2d(x,
                             num_channel, [kernel_size, kernel_size],
                             strides=1,
                             padding=padding,
                             name='conv2',
                             use_bias=False,
                             kernel_initializer=he_normal())
        x = tf.layers.batch_normalization(x,
                                          momentum=0.9,
                                          training=is_training,
                                          name='bn2')
        # Considering add relu to x before addition
        x = x + shortcut
        x = tf.nn.relu(x)
    return x
コード例 #3
0
    def _build_critic(self):
        self.critic_dense = fully_connected(self.lstm_outputs,
                                            128,
                                            activation_fn=LeakyReLU(0.2),
                                            weights_initializer=he_normal())

        self.critic_state_value = fully_connected(
            self.lstm_outputs,
            1,
            activation_fn=None,
            weights_initializer=he_normal())
コード例 #4
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def shortcut_v1(inputs,
                residual,
                use_bias=True,
                kernel_initializer=initializers.he_normal(),
                kernel_regularizer=regularizers.l2(WEIGHT_DECAY),
                bn_axis=-1,
                momentum=BATCH_NORM_DECAY,
                epsilon=BATCH_NORM_EPSILON,
                name=None):
    input_shape = inputs.get_shape().as_list()
    residual_shape = residual.get_shape().as_list()
    stride_width = int(round(input_shape[2] / residual_shape[2]))
    stride_height = int(round(input_shape[1] / residual_shape[1]))
    equal_channels = input_shape[3] == residual_shape[3]

    # 1 X 1 conv if shape is different. Else identity.
    if stride_width > 1 or stride_height > 1 or not equal_channels:
        inputs = layers.Conv2D(filters=residual_shape[3],
                               kernel_size=(1, 1),
                               strides=(stride_width, stride_height),
                               use_bias=use_bias,
                               kernel_initializer=kernel_initializer,
                               kernel_regularizer=kernel_regularizer,
                               name='res' + name)(inputs)
        inputs = layers.BatchNormalization(axis=bn_axis,
                                           momentum=momentum,
                                           epsilon=epsilon,
                                           name='bn' + name)(inputs)
    return layers.add([inputs, residual])
コード例 #5
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def bn_relu_conv(inputs,
                 filters,
                 kernel_size,
                 strides=(1, 1),
                 padding='same',
                 use_bias=True,
                 kernel_initializer=initializers.he_normal(),
                 kernel_regularizer=regularizers.l2(WEIGHT_DECAY),
                 bn_axis=-1,
                 momentum=BATCH_NORM_DECAY,
                 epsilon=BATCH_NORM_EPSILON,
                 name=None):
    x = bn_relu(inputs,
                axis=bn_axis,
                momentum=momentum,
                epsilon=epsilon,
                bn_name='bn' + name)
    x = layers.Conv2D(filters=filters,
                      kernel_size=kernel_size,
                      strides=strides,
                      padding=padding,
                      use_bias=use_bias,
                      kernel_initializer=kernel_initializer,
                      kernel_regularizer=kernel_regularizer,
                      name='res' + name)(x)
    return x
コード例 #6
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def residual_block(inputs,
                   block_function,
                   filters,
                   repetitions,
                   stage,
                   use_bias=True,
                   kernel_initializer=initializers.he_normal(),
                   kernel_regularizer=regularizers.l2(WEIGHT_DECAY),
                   bn_axis=-1,
                   momentum=BATCH_NORM_DECAY,
                   epsilon=BATCH_NORM_EPSILON):
    x = inputs
    for i in range(repetitions):
        init_strides = (1, 1)
        if i == 0 and stage != 2:
            init_strides = (2, 2)
        x = block_function(x,
                           filters=filters,
                           stage=stage,
                           block='block_%d' % (i + 1),
                           use_bias=use_bias,
                           init_strides=init_strides,
                           is_first_block_of_first_layer=(stage == 2
                                                          and i == 0),
                           kernel_initializer=kernel_initializer,
                           kernel_regularizer=kernel_regularizer,
                           bn_axis=bn_axis,
                           momentum=momentum,
                           epsilon=epsilon)
    return x
コード例 #7
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def bottleneck_v2(inputs,
                  filters,
                  init_strides=(1, 1),
                  use_bias=True,
                  is_first_block_of_first_layer=False,
                  kernel_initializer=initializers.he_normal(),
                  kernel_regularizer=regularizers.l2(WEIGHT_DECAY)):
    # TODO: not verified
    if is_first_block_of_first_layer:
        x = layers.Conv2D(filters=filters,
                          kernel_size=(1, 1),
                          strides=init_strides,
                          use_bias=use_bias,
                          padding='same',
                          kernel_initializer=kernel_initializer,
                          kernel_regularizer=kernel_regularizer)(inputs)
    else:
        x = bn_relu_conv(inputs,
                         filters=filters,
                         kernel_size=(1, 1),
                         strides=init_strides,
                         use_bias=use_bias)

    x = bn_relu_conv(x, filters=filters, kernel_size=(3, 3), use_bias=use_bias)
    x = bn_relu_conv(x,
                     filters=filters * 4,
                     kernel_size=(1, 1),
                     use_bias=use_bias)
    return shortcut_v2(inputs, x, use_bias=use_bias)
コード例 #8
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def bottleneck_v1(inputs,
                  filters,
                  stage,
                  block,
                  use_bias=True,
                  init_strides=(1, 1),
                  is_first_block_of_first_layer=False,
                  kernel_initializer=initializers.he_normal(),
                  kernel_regularizer=regularizers.l2(WEIGHT_DECAY),
                  bn_axis=-1,
                  momentum=BATCH_NORM_DECAY,
                  epsilon=BATCH_NORM_EPSILON):
    if isinstance(filters, int):
        filter1, filter2, filter3 = filters, filters, 4 * filters
    else:
        filter1, filter2, filter3 = filters
    base_name = str(stage) + block + '_branch'
    x = conv_bn_relu(inputs,
                     filters=filter1,
                     kernel_size=(1, 1),
                     strides=init_strides,
                     use_bias=use_bias,
                     kernel_initializer=kernel_initializer,
                     kernel_regularizer=kernel_regularizer,
                     bn_axis=bn_axis,
                     momentum=momentum,
                     epsilon=epsilon,
                     name=base_name + '2a')
    x = conv_bn_relu(x,
                     filters=filter2,
                     kernel_size=(3, 3),
                     strides=(1, 1),
                     use_bias=use_bias,
                     kernel_initializer=kernel_initializer,
                     kernel_regularizer=kernel_regularizer,
                     bn_axis=bn_axis,
                     momentum=momentum,
                     epsilon=epsilon,
                     name=base_name + '2b')
    x = conv_bn(x,
                filters=filter3,
                kernel_size=(1, 1),
                strides=(1, 1),
                use_bias=use_bias,
                kernel_initializer=kernel_initializer,
                kernel_regularizer=kernel_regularizer,
                bn_axis=bn_axis,
                momentum=momentum,
                epsilon=epsilon,
                name=base_name + '2c')
    x = shortcut_v1(inputs,
                    x,
                    use_bias=use_bias,
                    kernel_initializer=kernel_initializer,
                    kernel_regularizer=kernel_regularizer,
                    bn_axis=bn_axis,
                    momentum=momentum,
                    epsilon=epsilon,
                    name=base_name + '1')
    return layers.ReLU()(x)
コード例 #9
0
def vgg_block(inputs,
              layer_num,
              filters,
              kernel_size=(3, 3),
              strides=(1, 1),
              pool_size=(2, 2),
              pool_strides=(2, 2),
              bn_type='dbn',
              m=16,
              affine=True,
              iter=5,
              weight_decay=1e-4):
    conv = inputs
    for i in range(layer_num):
        if bn_type == 'dbn':
            bn = layers.DecorrelatedBN(m_per_group=m, affine=affine)
        elif bn_type == 'iter_norm':
            bn = layers.IterativeNormalization(m_per_group=m,
                                               affine=affine,
                                               iter_num=iter)
        else:
            bn = keras.layers.BatchNormalization()
        conv = conv_bn_relu(conv,
                            filters=filters,
                            kernel_size=kernel_size,
                            strides=strides,
                            bn=bn,
                            kernel_initializer=initializers.he_normal(),
                            kernel_regularizer=regularizers.l2(weight_decay))
    pose = keras.layers.MaxPool2D(pool_size=pool_size,
                                  strides=pool_strides,
                                  padding='same')(conv)
    return pose
コード例 #10
0
def ssd_multibox_layer(layer,
                       anchor_sizes,
                       anchor_ratios,
                       feat_shapes,
                       normalization=False):
    #need to figure out why length of anchor_size + length of anchor_ratios
    if normalization > 0:
        layer = custom_layers.l2_normalization(layer, scaling=True)
    num_anchors = len(anchor_sizes) + len(anchor_ratios)
    num_loc_pred = num_anchors * 4
    num_cls_pred = num_anchors * FLAGS.num_class

    pred = tf.layers.conv2d(
        layer,
        num_loc_pred + num_cls_pred, [3, 3],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    loc_pred = tf.reshape(pred[..., 0:(4 * num_anchors)],
                          [-1, feat_shapes[0], feat_shapes[0], num_anchors, 4])

    #     cls_pred = tf.layers.conv2d(layer, num_cls_pred, [3,3], 1, 'same', use_bias=True,kernel_initializer=he_normal(seed=0.01),activation=None,kernel_regularizer=tf.contrib.layers.l2_regularizer(FLAGS.weight_decay))
    cls_pred = tf.reshape(
        pred[..., (4 * num_anchors)::],
        [-1, feat_shapes[0], feat_shapes[0], num_anchors, FLAGS.num_class])
    #channel to last and reshape didn't implement
    return cls_pred, loc_pred
コード例 #11
0
    def _build_inputs(self):
        self._build_measurements()
        self._build_action_history()
        concatlist = [self.in_action3, self.dense_m3]

        self._build_conv()
        self.latent_z = fully_connected(self.convout,
                                        512,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())

        concatlist.append(self.latent_z)

        self.merged_input1 = tf.concat(concatlist, 1, name="InputMerge")
        #self.merged_input2 = fully_connected(self.merged_input1,256,
        #    activation_fn=LeakyReLU(0.2),weights_initializer=he_normal())

        #self.cell =     tf.nn.rnn_cell.BasicLSTMCell(512)
        self.cell = tf.contrib.cudnn_rnn.CudnnCompatibleLSTMCell(512)
        rnn_in = tf.reshape(self.merged_input1, [-1, self.time_steps, 651])
        self.c_in = tf.placeholder(shape=[None, self.cell.state_size.c],
                                   dtype=tf.float32)
        self.h_in = tf.placeholder(shape=[None, self.cell.state_size.h],
                                   dtype=tf.float32)
        state_in = tf.contrib.rnn.LSTMStateTuple(self.c_in, self.h_in)

        self.lstm_outputs, self.lstm_state = tf.nn.dynamic_rnn(
            self.cell, rnn_in, initial_state=state_in, dtype=tf.float32)

        self.lstm_outputs = tf.reshape(self.lstm_outputs, [-1, 512])
コード例 #12
0
    def _build_actor(self):

        p_layer = lambda size: fully_connected(self.lstm_outputs,
                                               size,
                                               activation_fn=tf.nn.softmax,
                                               weights_initializer=he_normal())
        probs = [p_layer(size) for size in self.a_size]

        dist_layer = lambda p: tf.distributions.Categorical(probs=p,
                                                            dtype=tf.int32)
        self.dists = [dist_layer(p) for p in probs]

        sample_dist = lambda dist: tf.expand_dims(dist.sample(), -1)
        sampled_actions = [sample_dist(dist) for dist in self.dists]

        best_fn = lambda p: tf.expand_dims(tf.argmax(p, axis=1), -1)
        best_actions = [best_fn(p) for p in probs]

        self.sampled_action = tf.concat(sampled_actions, axis=-1)
        self.best_action = tf.concat(best_actions, axis=-1)

        #going to need this frozen for use as pi_thetaold(action)
        self.sampled_action_prob = self.action_prob(self.sampled_action)
        self.best_action_prob = self.action_prob(self.best_action)

        self.feed_action = tf.placeholder(shape=[None, self.num_action_splits],
                                          dtype=tf.float32)
        self.feed_action_prob = self.action_prob(self.feed_action)
コード例 #13
0
 def _build_measurements(self):
     with tf.variable_scope("measurements"):
         self.measurements = tf.placeholder(
             shape=[None, self.num_measurements[0]], dtype=tf.float32)
         self.dense_m1 = fully_connected(flatten(self.measurements),
                                         128,
                                         activation_fn=LeakyReLU(0.2),
                                         weights_initializer=he_normal())
         self.dense_m2 = fully_connected(self.dense_m1,
                                         128,
                                         activation_fn=LeakyReLU(0.2),
                                         weights_initializer=he_normal())
         self.dense_m3 = fully_connected(self.dense_m2,
                                         128,
                                         activation_fn=LeakyReLU(0.2),
                                         weights_initializer=he_normal())
コード例 #14
0
def conv_layer(input_layer, size_in, size_out, name="conv"):
    """
    This function is to define convloution layer with
    following default parmameters
        Filter size:		5*5
        Padding:			SAME
        Inititalization: 	HE Normal
        Activation:			LeakyRelu(Alpha=0.5)
    """
    with tf.name_scope(name):
        # Defining fliter weights
        weights = tf.get_variable(name + "/" + "weights",
                                  dtype=tf.float32,
                                  shape=[5, 5, size_in, size_out],
                                  initializer=he_normal(seed=8))
        # Defining biases
        biases = tf.get_variable(name + "/" + "biases",
                                 dtype=tf.float32,
                                 shape=[size_out],
                                 initializer=tf.constant_initializer(0.01))
        # Convolving the input with weights
        conv = tf.nn.conv2d(input_layer,
                            weights,
                            strides=[1, 1, 1, 1],
                            padding="SAME")
        # Applying leakey relu activation function
        act = tf.nn.leaky_relu(conv + biases, alpha=0.5, name="leakyrelu")

        # Adding historgrams to visualize in tensorboard
        tf.summary.histogram("weights", weights)
        tf.summary.histogram("biases", biases)
        tf.summary.histogram("activations", act)
        return act
コード例 #15
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def basic_block_v2(inputs,
                   filters,
                   stage,
                   block,
                   use_bias=True,
                   init_strides=(1, 1),
                   is_first_block_of_first_layer=False,
                   kernel_initializer=initializers.he_normal(),
                   kernel_regularizer=regularizers.l2(WEIGHT_DECAY),
                   bn_axis=-1,
                   momentum=BATCH_NORM_DECAY,
                   epsilon=BATCH_NORM_EPSILON):
    if isinstance(filters, int):
        filters1, filters2 = filters, filters
    else:
        filters1, filters2 = filters
    base_name = str(stage) + block + '_branch'
    if is_first_block_of_first_layer:
        x = layers.Conv2D(filters=filters1,
                          kernel_size=(3, 3),
                          use_bias=use_bias,
                          strides=init_strides,
                          padding='same',
                          kernel_initializer=kernel_initializer,
                          kernel_regularizer=kernel_regularizer,
                          name=base_name + '2a')(inputs)
    else:
        x = bn_relu_conv(inputs,
                         filters=filters1,
                         kernel_size=(3, 3),
                         use_bias=use_bias,
                         strides=init_strides,
                         kernel_initializer=kernel_initializer,
                         kernel_regularizer=kernel_regularizer,
                         bn_axis=bn_axis,
                         momentum=momentum,
                         epsilon=epsilon,
                         name=base_name + '2a')

    residual = bn_relu_conv(x,
                            filters=filters2,
                            kernel_size=(3, 3),
                            strides=(1, 1),
                            use_bias=use_bias,
                            kernel_initializer=kernel_initializer,
                            kernel_regularizer=kernel_regularizer,
                            bn_axis=bn_axis,
                            momentum=momentum,
                            epsilon=epsilon,
                            name=base_name + '2b')
    return shortcut_v2(inputs,
                       residual,
                       use_bias=use_bias,
                       kernel_initializer=kernel_initializer,
                       kernel_regularizer=kernel_regularizer,
                       name=base_name + '1')
コード例 #16
0
    def _build_conv(self):

        #self.conv_training = tf.placeholder_with_default(True,shape=())

        self.observation = tf.placeholder(
            shape=[None, self.framedim[0], self.framedim[1], 3],
            dtype=tf.float32)
        self.conv1 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.observation,
                            num_outputs=16,
                            kernel_size=[3, 3],
                            stride=[3, 3],
                            padding='VALID')
        #self.conv1 = tf.layers.batch_normalization(self.conv1,training=self.conv_training)
        self.conv2 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.conv1,
                            num_outputs=32,
                            kernel_size=[2, 2],
                            stride=[2, 2],
                            padding='VALID')
        #self.conv2 = tf.layers.batch_normalization(self.conv2,training=self.conv_training)
        self.conv3 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.conv2,
                            num_outputs=64,
                            kernel_size=[2, 2],
                            stride=[2, 2],
                            padding='VALID')
        #self.conv3 = tf.layers.batch_normalization(self.conv3,training=self.conv_training)
        self.conv4 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.conv3,
                            num_outputs=128,
                            kernel_size=[2, 2],
                            stride=[1, 1],
                            padding='VALID')
        #self.conv4 = tf.layers.batch_normalization(self.conv4,training=self.conv_training)

        #self.conv5 = tf.layers.batch_normalization(self.conv5,training=self.conv_training)

        self.convout = flatten(self.conv4)
コード例 #17
0
def conv_bn_relu(inputs,
                 filters=64,
                 kernel_size=(7, 7),
                 strides=(2, 2),
                 bn=keras.layers.BatchNormalization(),
                 kernel_initializer=initializers.he_normal(),
                 kernel_regularizer=regularizers.l2(WEIGHT_DECAY)):
    x = keras.layers.Conv2D(filters=filters,
                            kernel_size=kernel_size,
                            strides=strides,
                            padding='same',
                            kernel_initializer=kernel_initializer,
                            kernel_regularizer=kernel_regularizer)(inputs)
    return bn_relu(x, bn)
コード例 #18
0
def bn_relu_conv(inputs,
                 filters,
                 kernel_size,
                 strides=(1, 1),
                 padding='same',
                 bn=keras.layers.BatchNormalization(),
                 kernel_initializer=initializers.he_normal(),
                 kernel_regularizer=regularizers.l2(WEIGHT_DECAY)):
    x = bn_relu(inputs, bn)
    x = keras.layers.Conv2D(filters=filters,
                            kernel_size=kernel_size,
                            strides=strides,
                            padding=padding,
                            kernel_initializer=kernel_initializer,
                            kernel_regularizer=kernel_regularizer)(x)
    return x
コード例 #19
0
def shortcut(inputs,
             residual,
             kernel_initializer=initializers.he_normal(),
             kernel_regularizer=regularizers.l2(WEIGHT_DECAY)):
    input_shape = inputs.get_shape().as_list()
    residual_shape = residual.get_shape().as_list()
    stride_width = int(round(input_shape[2] / residual_shape[2]))
    stride_height = int(round(input_shape[1] / residual_shape[1]))
    equal_channels = input_shape[3] == residual_shape[3]

    # 1 X 1 conv if shape is different. Else identity.
    if stride_width > 1 or stride_height > 1 or not equal_channels:
        inputs = keras.layers.Conv2D(
            filters=residual_shape[3],
            kernel_size=(1, 1),
            strides=(stride_width, stride_height),
            padding='valid',
            kernel_initializer=kernel_initializer,
            kernel_regularizer=kernel_regularizer)(inputs)
    return keras.layers.add([inputs, residual])
コード例 #20
0
def basic_block(inputs,
                filters,
                init_strides=(1, 1),
                is_first_block_of_first_layer=False,
                kernel_initializer=initializers.he_normal(),
                kernel_regularizer=regularizers.l2(WEIGHT_DECAY)):
    if is_first_block_of_first_layer:
        x = keras.layers.Conv2D(filters=filters,
                                kernel_size=(3, 3),
                                strides=init_strides,
                                padding='same',
                                kernel_initializer=kernel_initializer,
                                kernel_regularizer=kernel_regularizer)(inputs)
    else:
        x = bn_relu_conv(inputs,
                         filters=filters,
                         kernel_size=(3, 3),
                         strides=init_strides)

    residual = bn_relu_conv(x, filters=filters, kernel_size=(3, 3))
    return shortcut(inputs, residual)
コード例 #21
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def shortcut_v2(inputs,
                residual,
                use_bias=True,
                kernel_initializer=initializers.he_normal(),
                kernel_regularizer=regularizers.l2(WEIGHT_DECAY),
                name=None):
    input_shape = inputs.get_shape().as_list()
    residual_shape = residual.get_shape().as_list()
    stride_width = int(round(input_shape[2] / residual_shape[2]))
    stride_height = int(round(input_shape[1] / residual_shape[1]))
    equal_channels = input_shape[3] == residual_shape[3]

    # 1 X 1 conv if shape is different. Else identity.
    if stride_width > 1 or stride_height > 1 or not equal_channels:
        inputs = layers.Conv2D(filters=residual_shape[3],
                               kernel_size=(1, 1),
                               strides=(stride_width, stride_height),
                               use_bias=use_bias,
                               kernel_initializer=kernel_initializer,
                               kernel_regularizer=kernel_regularizer,
                               name='res' + name)(inputs)
    return layers.add([inputs, residual])
コード例 #22
0
def conv_bn_relu(x,
                 num_channel,
                 kernel_size,
                 stride,
                 is_training,
                 scope,
                 padding='same',
                 use_bias=False):
    with tf.variable_scope(scope):
        x = tf.layers.conv2d(x,
                             num_channel, [kernel_size, kernel_size],
                             strides=stride,
                             activation=None,
                             name='conv',
                             padding=padding,
                             use_bias=use_bias,
                             kernel_initializer=he_normal())
        x = tf.layers.batch_normalization(x,
                                          momentum=0.9,
                                          training=is_training,
                                          name='bn')
        x = tf.nn.relu(x, name='relu')
        return x
コード例 #23
0
ファイル: res_blocks.py プロジェクト: kampaitees/FMRouting
def conv_bn(inputs,
            filters=64,
            kernel_size=(3, 3),
            strides=(1, 1),
            use_bias=True,
            kernel_initializer=initializers.he_normal(),
            kernel_regularizer=regularizers.l2(WEIGHT_DECAY),
            bn_axis=-1,
            momentum=BATCH_NORM_DECAY,
            epsilon=BATCH_NORM_EPSILON,
            name=None):
    x = layers.Conv2D(filters=filters,
                      kernel_size=kernel_size,
                      strides=strides,
                      padding='same',
                      use_bias=use_bias,
                      kernel_initializer=kernel_initializer,
                      kernel_regularizer=kernel_regularizer,
                      name='res' + name)(inputs)
    return layers.BatchNormalization(axis=bn_axis,
                                     momentum=momentum,
                                     epsilon=epsilon,
                                     name='bn' + name)(x)
コード例 #24
0
def initial_block(x,
                  is_training=True,
                  scope='initial_block',
                  padding='same',
                  use_bias=False):
    with tf.variable_scope(scope):
        x = tf.layers.conv2d(x,
                             64, [7, 7],
                             strides=2,
                             activation=None,
                             name='conv1',
                             padding=padding,
                             use_bias=use_bias,
                             kernel_initializer=he_normal())
        x = tf.layers.batch_normalization(x,
                                          momentum=0.9,
                                          training=is_training,
                                          name='bn1')
        x = tf.nn.relu(x, name='relu')
        x = tf.layers.max_pooling2d(x, [3, 3],
                                    strides=2,
                                    name='maxpool',
                                    padding=padding)
    return x
コード例 #25
0
def linknet(inputs,
            num_classes,
            reuse=None,
            is_training=True,
            scope='linknet'):

    filters = [64, 128, 256, 512]
    filters_m = [64, 128, 256, 512][::-1]
    filters_n = [64, 64, 128, 256][::-1]

    with tf.variable_scope(scope, reuse=reuse):

        # Encoder
        eb0 = initial_block(inputs,
                            is_training=is_training,
                            scope='initial_block')
        eb1 = encoder_block(eb0,
                            filters[0],
                            3,
                            1,
                            is_training,
                            scope='eb1',
                            padding='same')
        ebi = eb1
        ebs = [
            eb1,
        ]
        i = 2
        for filter_i in filters[1:]:
            ebi = encoder_block(ebi,
                                filter_i,
                                3,
                                2,
                                is_training,
                                scope='eb' + str(i),
                                padding='same')
            ebs.append(ebi)
            i = i + 1
        net = ebi

        # Decoder
        dbi = decoder_block(net,
                            filters_m[0],
                            filters_n[0],
                            3,
                            2,
                            is_training=is_training,
                            scope='db4',
                            padding='same')
        i = len(filters_m) - 1
        for filters_i in zip(filters_m[1:-1], filters_n[1:-1]):
            dbi = dbi + ebs[i - 1]
            dbi = decoder_block(dbi,
                                filters_i[0],
                                filters_i[1],
                                3,
                                2,
                                is_training=is_training,
                                scope='db' + str(i),
                                padding='same')
            i = i - 1
        dbi = dbi + ebs[0]
        dbi = decoder_block(dbi,
                            filters_m[-1],
                            filters_n[-1],
                            3,
                            1,
                            is_training=is_training,
                            scope='db1',
                            padding='same')
        net = dbi

        # Classification
        with tf.variable_scope('classifier', reuse=reuse):
            net = upconv_bn_relu(net,
                                 32,
                                 3,
                                 2,
                                 is_training=is_training,
                                 scope='conv_transpose')
            net = conv_bn_relu(net,
                               32,
                               3,
                               1,
                               is_training=is_training,
                               scope='conv')
            # Last layer, no batch normalization or activation
            logits = tf.layers.conv2d_transpose(net,
                                                num_classes,
                                                kernel_size=2,
                                                strides=2,
                                                padding='same',
                                                name='conv_transpose',
                                                kernel_initializer=he_normal())
            if num_classes > 1:
                prob = tf.nn.softmax(logits, name='prob')
            else:
                prob = tf.nn.sigmoid(logits, name='prob')

            return prob, logits
コード例 #26
0
    def __init__(self, a_size, num_offsets, num_measurements, xdim, ydim):
        #Inputs and visual encoding layers
        #num_measurements[0] = num_observe_measurements
        #num_measurements[1] = num_predict_measuremnets

        self.observation = tf.placeholder(shape=[None, xdim, ydim, 6],
                                          dtype=tf.float32)
        self.conv1 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.observation,
                            num_outputs=32,
                            kernel_size=[8, 8],
                            stride=[4, 4],
                            padding='VALID')
        self.conv2 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.conv1,
                            num_outputs=64,
                            kernel_size=[4, 4],
                            stride=[2, 2],
                            padding='VALID')
        self.conv3 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.conv2,
                            num_outputs=128,
                            kernel_size=[3, 3],
                            stride=[1, 1],
                            padding='VALID')

        self.convout = fully_connected(flatten(self.conv3),
                                       1024,
                                       activation_fn=LeakyReLU(0.2),
                                       weights_initializer=he_normal())

        self.measurements = tf.placeholder(shape=[None, num_measurements[0]],
                                           dtype=tf.float32)
        self.dense_m1 = fully_connected(flatten(self.measurements),
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_m2 = fully_connected(self.dense_m1,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_m3 = fully_connected(self.dense_m2,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())

        self.goals = tf.placeholder(shape=[None, num_measurements[1]],
                                    dtype=tf.float32)
        self.dense_g1 = fully_connected(flatten(self.goals),
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_g2 = fully_connected(self.dense_g1,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_g3 = fully_connected(self.dense_g2,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())

        self.action_history = tf.placeholder(shape=[None, 27, 12],
                                             dtype=tf.float32)
        self.in_action1 = fully_connected(flatten(self.action_history),
                                          128,
                                          activation_fn=LeakyReLU(0.2),
                                          weights_initializer=he_normal())
        self.in_action2 = fully_connected(self.in_action1,
                                          128,
                                          activation_fn=LeakyReLU(0.2),
                                          weights_initializer=he_normal())
        self.in_action3 = fully_connected(self.in_action2,
                                          128,
                                          activation_fn=LeakyReLU(0.2),
                                          weights_initializer=he_normal())

        self.merged_input1 = tf.concat(
            [self.in_action3, self.dense_m3, self.convout, self.dense_g3],
            1,
            name="InputMerge")
        self.merged_input2 = fully_connected(self.merged_input1,
                                             512,
                                             activation_fn=LeakyReLU(0.2),
                                             weights_initializer=he_normal())

        self.memcache_l1 = tf.placeholder(shape=[None, 5, 512],
                                          dtype=tf.float32)
        self.mem1_dense1 = fully_connected(flatten(self.memcache_l1),
                                           256,
                                           activation_fn=LeakyReLU(0.2),
                                           weights_initializer=he_normal())

        self.memcache_l2 = tf.placeholder(shape=[None, 6, 256],
                                          dtype=tf.float32)
        self.mem2_dense1 = fully_connected(flatten(self.memcache_l2),
                                           256,
                                           activation_fn=LeakyReLU(0.2),
                                           weights_initializer=he_normal())

        self.memcache_l3 = tf.placeholder(shape=[None, 6, 256],
                                          dtype=tf.float32)
        self.mem3_dense1 = fully_connected(flatten(self.memcache_l3),
                                           256,
                                           activation_fn=LeakyReLU(0.2),
                                           weights_initializer=he_normal())

        self.memcache_l4 = tf.placeholder(shape=[None, 6, 256],
                                          dtype=tf.float32)
        self.mem4_dense1 = fully_connected(flatten(self.memcache_l4),
                                           256,
                                           activation_fn=LeakyReLU(0.2),
                                           weights_initializer=he_normal())

        self.merged_with_mems = tf.concat([
            self.merged_input2, self.mem1_dense1, self.mem2_dense1,
            self.mem3_dense1, self.mem4_dense1
        ], 1)

        self.exploring = tf.placeholder_with_default(False, shape=())
        self.merged_dropout = dropout(self.merged_with_mems,
                                      keep_prob=0.98,
                                      is_training=self.exploring)

        #We calculate separate expectation and advantage streams, then combine then later
        #This technique is described in https://arxiv.org/pdf/1511.06581.pdf

        outputdim = num_measurements[1] * num_offsets
        outputdim_a1 = num_measurements[1] * num_offsets * a_size[0]
        outputdim_a2 = num_measurements[1] * num_offsets * a_size[1]
        outputdim_a3 = num_measurements[1] * num_offsets * a_size[2]
        outputdim_a4 = num_measurements[1] * num_offsets * a_size[3]

        #average expectation accross all actions
        self.expectation1 = fully_connected(self.merged_dropout,
                                            512,
                                            activation_fn=LeakyReLU(0.2),
                                            weights_initializer=he_normal())
        self.expectation2 = fully_connected(self.expectation1,
                                            outputdim,
                                            activation_fn=LeakyReLU(0.2),
                                            weights_initializer=he_normal())

        #split actions into functionally seperable groups
        #e.g. the expectations of movements depend intimately on
        #combinations of movements (e.g. forward left vs forward right)
        #but the expectations of movements can be seperated from the outcome
        #of switching weapons for example. This separation reduces the
        # number of outputs of the model by an order of magnitude or more
        #when the number of subactions is large while maintaining the ability
        #to choose from a large number of actions.

        self.a1_advantages1 = fully_connected(self.merged_dropout,
                                              512,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a1_advantages2 = fully_connected(self.a1_advantages1,
                                              outputdim_a1,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.a2_advantages1 = fully_connected(self.merged_dropout,
                                              256,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a2_advantages2 = fully_connected(self.a2_advantages1,
                                              outputdim_a2,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.a3_advantages1 = fully_connected(self.merged_dropout,
                                              256,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a3_advantages2 = fully_connected(self.a3_advantages1,
                                              outputdim_a3,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.a4_advantages1 = fully_connected(self.merged_dropout,
                                              512,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a4_advantages2 = fully_connected(self.a4_advantages1,
                                              outputdim_a4,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.expectation2 = tf.reshape(self.expectation2,
                                       [-1, num_offsets, num_measurements[1]])
        self.a1_advantages2 = tf.reshape(
            self.a1_advantages2,
            [-1, a_size[0], num_offsets, num_measurements[1]])
        self.a2_advantages2 = tf.reshape(
            self.a2_advantages2,
            [-1, a_size[1], num_offsets, num_measurements[1]])
        self.a3_advantages2 = tf.reshape(
            self.a3_advantages2,
            [-1, a_size[2], num_offsets, num_measurements[1]])
        self.a4_advantages2 = tf.reshape(
            self.a4_advantages2,
            [-1, a_size[3], num_offsets, num_measurements[1]])

        #batch normalize, expectation stream handles the average
        self.a1_advantages2 = self.a1_advantages2 - tf.reduce_mean(
            self.a1_advantages2, axis=1, keep_dims=True)
        self.a2_advantages2 = self.a2_advantages2 - tf.reduce_mean(
            self.a2_advantages2, axis=1, keep_dims=True)
        self.a3_advantages2 = self.a3_advantages2 - tf.reduce_mean(
            self.a3_advantages2, axis=1, keep_dims=True)
        self.a4_advantages2 = self.a4_advantages2 - tf.reduce_mean(
            self.a4_advantages2, axis=1, keep_dims=True)

        #tensor of 0 and 1 which indicate whether the action was taken
        #when we multiply each with the advantage stream and reduce_sum we get only the chosen actions
        self.a1_chosen = tf.placeholder(
            shape=[None, a_size[0], num_offsets, num_measurements[1]],
            dtype=tf.float32)
        self.a2_chosen = tf.placeholder(
            shape=[None, a_size[1], num_offsets, num_measurements[1]],
            dtype=tf.float32)
        self.a3_chosen = tf.placeholder(
            shape=[None, a_size[2], num_offsets, num_measurements[1]],
            dtype=tf.float32)
        self.a4_chosen = tf.placeholder(
            shape=[None, a_size[3], num_offsets, num_measurements[1]],
            dtype=tf.float32)

        self.a1_pred = tf.reduce_sum(tf.multiply(self.a1_advantages2,
                                                 self.a1_chosen),
                                     axis=1)
        self.a2_pred = tf.reduce_sum(tf.multiply(self.a2_advantages2,
                                                 self.a2_chosen),
                                     axis=1)
        self.a3_pred = tf.reduce_sum(tf.multiply(self.a3_advantages2,
                                                 self.a3_chosen),
                                     axis=1)
        self.a4_pred = tf.reduce_sum(tf.multiply(self.a4_advantages2,
                                                 self.a4_chosen),
                                     axis=1)

        #sum up all contributions to the output prediction
        self.prediction = tf.add_n([
            self.expectation2, self.a1_pred, self.a2_pred, self.a3_pred,
            self.a4_pred
        ])

        #This is the actual
        self.target = tf.placeholder(
            shape=[None, num_offsets, num_measurements[1]], dtype=tf.float32)

        #Loss function
        self.loss = tf.reduce_sum(
            tf.squared_difference(self.prediction, self.target))

        self.episodes = tf.placeholder(shape=(), dtype=tf.int32)
        starting_learning_rate = 3e-4
        learning_rate = tf.train.exponential_decay(starting_learning_rate,
                                                   self.episodes, 9000, 0.5)

        self.trainer = tf.train.AdamOptimizer(learning_rate=learning_rate,
                                              beta1=0.95,
                                              beta2=0.999,
                                              epsilon=1e-4)

        #Get & apply gradients from network
        global_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES)
        self.gradients = tf.gradients(self.loss, global_vars)
        self.var_norms = tf.global_norm(global_vars)
        grads, self.grad_norms = tf.clip_by_global_norm(self.gradients, 5)
        self.apply_grads = self.trainer.apply_gradients(
            list(zip(grads, global_vars)))
コード例 #27
0
def vgg16_backbone(layer, is_training):
    end_points = {}
    #conv1
    layer, _ = conv_layer_2conv(layer, 64, is_training=is_training)
    #conv2
    layer, _ = conv_layer_2conv(layer, 128, is_training=is_training)
    #conv3
    layer, _ = conv_layer_3conv(layer, 256, is_training=is_training)
    #conv4
    layer, foot_stage1 = conv_layer_3conv(layer, 512, is_training=is_training)
    end_points['block4'] = foot_stage1
    #conv5
    layer = tf.layers.conv2d(
        layer,
        512, [3, 3],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    layer = tf.layers.conv2d(
        layer,
        512, [3, 3],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.layers.max_pooling2d(layer, [3, 3], strides=1, padding='same')
    layer = tf.nn.relu(layer)

    #FC6
    layer = slim.conv2d(layer, 1024, [3, 3], rate=6, scope='conv6')

    #FC7
    layer = tf.layers.conv2d(
        layer,
        1024, [1, 1],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    end_points['block7'] = layer

    #conv8
    layer = tf.layers.conv2d(
        layer,
        256, [1, 1],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    layer = tf.layers.conv2d(
        layer,
        512, [3, 3],
        2,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    end_points['block8'] = layer

    #conv9
    layer = tf.layers.conv2d(
        layer,
        128, [1, 1],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    layer = tf.layers.conv2d(
        layer,
        256, [3, 3],
        2,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    end_points['block9'] = layer

    #conv10
    layer = tf.layers.conv2d(
        layer,
        128, [1, 1],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    layer = tf.layers.conv2d(
        layer,
        256, [3, 3],
        1,
        'valid',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    end_points['block10'] = layer

    #conv11
    layer = tf.layers.conv2d(
        layer,
        128, [1, 1],
        1,
        'same',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    layer = tf.layers.conv2d(
        layer,
        256, [3, 3],
        1,
        'valid',
        use_bias=True,
        kernel_initializer=he_normal(seed=0.01),
        activation=None,
        kernel_regularizer=tf.contrib.layers.l2_regularizer(
            FLAGS.weight_decay))
    layer = tf.layers.batch_normalization(layer, training=is_training)
    layer = tf.nn.relu(layer)
    end_points['block11'] = layer

    return end_points
コード例 #28
0
    def _create_pc_net(self):
        #dim of deconv xdim ->(xdim-1)*xstride + xkernal

        self.deconv_in_E = tf.reshape(self.merged_dropout, [-1, 8, 8, 4])
        self.deconv_in_a1 = tf.tile(self.deconv_in_E,
                                    [1, 1, 1, self.a_size[0]])
        self.deconv_in_a2 = tf.tile(self.deconv_in_E,
                                    [1, 1, 1, self.a_size[1]])
        self.deconv_in_a3 = tf.tile(self.deconv_in_E,
                                    [1, 1, 1, self.a_size[2]])
        self.deconv_in_a4 = tf.tile(self.deconv_in_E,
                                    [1, 1, 1, self.a_size[3]])

        self.deconv_E = conv2d_transpose(activation_fn=LeakyReLU(0.2),
                                         weights_initializer=he_normal(),
                                         inputs=self.deconv_in_E,
                                         num_outputs=1,
                                         kernel_size=[6, 6],
                                         stride=[2, 2],
                                         padding='VALID')

        self.deconv_a1 = conv2d_transpose(activation_fn=LeakyReLU(0.2),
                                          weights_initializer=he_normal(),
                                          inputs=self.deconv_in_a1,
                                          num_outputs=self.a_size[0],
                                          kernel_size=[6, 6],
                                          stride=[2, 2],
                                          padding='VALID')

        self.deconv_a2 = conv2d_transpose(activation_fn=LeakyReLU(0.2),
                                          weights_initializer=he_normal(),
                                          inputs=self.deconv_in_a2,
                                          num_outputs=self.a_size[1],
                                          kernel_size=[6, 6],
                                          stride=[2, 2],
                                          padding='VALID')

        self.deconv_a3 = conv2d_transpose(activation_fn=LeakyReLU(0.2),
                                          weights_initializer=he_normal(),
                                          inputs=self.deconv_in_a3,
                                          num_outputs=self.a_size[2],
                                          kernel_size=[6, 6],
                                          stride=[2, 2],
                                          padding='VALID')

        self.deconv_a4 = conv2d_transpose(activation_fn=LeakyReLU(0.2),
                                          weights_initializer=he_normal(),
                                          inputs=self.deconv_in_a4,
                                          num_outputs=self.a_size[3],
                                          kernel_size=[6, 6],
                                          stride=[2, 2],
                                          padding='VALID')

        self.deconv_a1 = self.deconv_a1 - tf.reduce_mean(
            self.deconv_a1, axis=3, keep_dims=True)
        self.deconv_a2 = self.deconv_a2 - tf.reduce_mean(
            self.deconv_a2, axis=3, keep_dims=True)
        self.deconv_a3 = self.deconv_a3 - tf.reduce_mean(
            self.deconv_a3, axis=3, keep_dims=True)
        self.deconv_a4 = self.deconv_a4 - tf.reduce_mean(
            self.deconv_a4, axis=3, keep_dims=True)

        self.deconv_a1_chosen = tf.placeholder(
            shape=[None, 20, 20, self.a_size[0]], dtype=tf.float32)
        self.deconv_a2_chosen = tf.placeholder(
            shape=[None, 20, 20, self.a_size[1]], dtype=tf.float32)
        self.deconv_a3_chosen = tf.placeholder(
            shape=[None, 20, 20, self.a_size[2]], dtype=tf.float32)
        self.deconv_a4_chosen = tf.placeholder(
            shape=[None, 20, 20, self.a_size[3]], dtype=tf.float32)

        self.deconv_a1_pred = tf.reduce_sum(tf.multiply(
            self.deconv_a1_chosen, self.deconv_a1),
                                            axis=3)
        self.deconv_a2_pred = tf.reduce_sum(tf.multiply(
            self.deconv_a2_chosen, self.deconv_a2),
                                            axis=3)
        self.deconv_a3_pred = tf.reduce_sum(tf.multiply(
            self.deconv_a3_chosen, self.deconv_a3),
                                            axis=3)
        self.deconv_a4_pred = tf.reduce_sum(tf.multiply(
            self.deconv_a4_chosen, self.deconv_a4),
                                            axis=3)

        self.pc_prediction = tf.add_n([
            tf.squeeze(self.deconv_E), self.deconv_a1_pred,
            self.deconv_a2_pred, self.deconv_a3_pred, self.deconv_a4_pred
        ])
        self.pc_target = tf.placeholder(shape=[None, 20, 20], dtype=tf.float32)

        self.pc_loss = tf.losses.mean_squared_error(self.pc_target,
                                                    self.pc_prediction)
コード例 #29
0
    def _create_base_net(self):
        #average expectation accross all actions
        self.expectation1 = fully_connected(self.merged_dropout,
                                            512,
                                            activation_fn=LeakyReLU(0.2),
                                            weights_initializer=he_normal())
        self.expectation2 = fully_connected(self.expectation1,
                                            self.outputdim,
                                            activation_fn=LeakyReLU(0.2),
                                            weights_initializer=he_normal())

        self.a1_advantages1 = fully_connected(self.merged_dropout,
                                              512,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a1_advantages2 = fully_connected(self.a1_advantages1,
                                              self.outputdim_a1,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.a2_advantages1 = fully_connected(self.merged_dropout,
                                              256,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a2_advantages2 = fully_connected(self.a2_advantages1,
                                              self.outputdim_a2,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.a3_advantages1 = fully_connected(self.merged_dropout,
                                              256,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a3_advantages2 = fully_connected(self.a3_advantages1,
                                              self.outputdim_a3,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.a4_advantages1 = fully_connected(self.merged_dropout,
                                              512,
                                              activation_fn=LeakyReLU(0.2),
                                              weights_initializer=he_normal())
        self.a4_advantages2 = fully_connected(self.a4_advantages1,
                                              self.outputdim_a4,
                                              activation_fn=None,
                                              weights_initializer=he_normal())

        self.expectation2 = tf.reshape(
            self.expectation2,
            [-1, self.num_offsets, self.num_measurements[1]])
        self.a1_advantages2 = tf.reshape(
            self.a1_advantages2,
            [-1, self.a_size[0], self.num_offsets, self.num_measurements[1]])
        self.a2_advantages2 = tf.reshape(
            self.a2_advantages2,
            [-1, self.a_size[1], self.num_offsets, self.num_measurements[1]])
        self.a3_advantages2 = tf.reshape(
            self.a3_advantages2,
            [-1, self.a_size[2], self.num_offsets, self.num_measurements[1]])
        self.a4_advantages2 = tf.reshape(
            self.a4_advantages2,
            [-1, self.a_size[3], self.num_offsets, self.num_measurements[1]])

        #batch normalize, expectation stream handles the average
        self.a1_advantages2 = self.a1_advantages2 - tf.reduce_mean(
            self.a1_advantages2, axis=1, keep_dims=True)
        self.a2_advantages2 = self.a2_advantages2 - tf.reduce_mean(
            self.a2_advantages2, axis=1, keep_dims=True)
        self.a3_advantages2 = self.a3_advantages2 - tf.reduce_mean(
            self.a3_advantages2, axis=1, keep_dims=True)
        self.a4_advantages2 = self.a4_advantages2 - tf.reduce_mean(
            self.a4_advantages2, axis=1, keep_dims=True)

        #tensor of 0 and 1 which indicate whether the action was taken
        #when we multiply each with the advantage stream and reduce_sum we get only the chosen actions
        self.a1_chosen = tf.placeholder(shape=[
            None, self.a_size[0], self.num_offsets, self.num_measurements[1]
        ],
                                        dtype=tf.float32)
        self.a2_chosen = tf.placeholder(shape=[
            None, self.a_size[1], self.num_offsets, self.num_measurements[1]
        ],
                                        dtype=tf.float32)
        self.a3_chosen = tf.placeholder(shape=[
            None, self.a_size[2], self.num_offsets, self.num_measurements[1]
        ],
                                        dtype=tf.float32)
        self.a4_chosen = tf.placeholder(shape=[
            None, self.a_size[3], self.num_offsets, self.num_measurements[1]
        ],
                                        dtype=tf.float32)

        self.a1_pred = tf.reduce_sum(tf.multiply(self.a1_advantages2,
                                                 self.a1_chosen),
                                     axis=1)
        self.a2_pred = tf.reduce_sum(tf.multiply(self.a2_advantages2,
                                                 self.a2_chosen),
                                     axis=1)
        self.a3_pred = tf.reduce_sum(tf.multiply(self.a3_advantages2,
                                                 self.a3_chosen),
                                     axis=1)
        self.a4_pred = tf.reduce_sum(tf.multiply(self.a4_advantages2,
                                                 self.a4_chosen),
                                     axis=1)

        #sum up all contributions to the output prediction
        self.prediction = tf.add_n([
            self.expectation2, self.a1_pred, self.a2_pred, self.a3_pred,
            self.a4_pred
        ])

        #This is the actual
        self.target = tf.placeholder(
            shape=[None, self.num_offsets, self.num_measurements[1]],
            dtype=tf.float32)

        #Loss function
        self.loss_main = tf.losses.mean_squared_error(self.target,
                                                      self.prediction)
コード例 #30
0
    def _create_input_stream(self):
        self.observation = tf.placeholder(
            shape=[None, self.xdim, self.ydim, 3], dtype=tf.float32)
        self.conv1 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.observation,
                            num_outputs=32,
                            kernel_size=[8, 8],
                            stride=[4, 4],
                            padding='VALID')
        self.conv2 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.conv1,
                            num_outputs=64,
                            kernel_size=[4, 4],
                            stride=[2, 2],
                            padding='VALID')
        self.conv3 = conv2d(activation_fn=LeakyReLU(0.2),
                            weights_initializer=he_normal(),
                            inputs=self.conv2,
                            num_outputs=64,
                            kernel_size=[3, 3],
                            stride=[1, 1],
                            padding='VALID')

        self.convout = fully_connected(flatten(self.conv3),
                                       512,
                                       activation_fn=LeakyReLU(0.2),
                                       weights_initializer=he_normal())

        self.measurements = tf.placeholder(
            shape=[None, self.num_measurements[0]], dtype=tf.float32)
        self.dense_m1 = fully_connected(flatten(self.measurements),
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_m2 = fully_connected(self.dense_m1,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_m3 = fully_connected(self.dense_m2,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())

        self.goals = tf.placeholder(shape=[None, self.num_measurements[1]],
                                    dtype=tf.float32)
        self.dense_g1 = fully_connected(flatten(self.goals),
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_g2 = fully_connected(self.dense_g1,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())
        self.dense_g3 = fully_connected(self.dense_g2,
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())

        self.action_history = tf.placeholder(shape=[None, 12],
                                             dtype=tf.float32)
        self.dense_a1 = fully_connected(flatten(self.goals),
                                        128,
                                        activation_fn=LeakyReLU(0.2),
                                        weights_initializer=he_normal())

        self.merged_input1 = tf.concat(
            [self.dense_a1, self.dense_m3, self.convout, self.dense_g3],
            1,
            name="InputMerge")