예제 #1
0
파일: rec-dog.py 프로젝트: editor123/ML
def define_graph(input_image, batch_size):
    print("string define the graph...")

    # 卷积层1
    conv2d_layer_1 = convolution2d(
    input_image,
    num_outputs = 32, # filter 个数
    kernel_size = (5,5),      # filter 的宽和高
    activation_fn = tf.nn.relu,
    weights_initializer = tf.random_normal_initializer,
    stride = [2, 2],
    trainable = True)

    pool_layer_1 = tf.nn.max_pool(conv2d_layer_1, ksize = [1, 2, 2, 1],
                    strides = [1, 2, 2, 1],
                    padding = 'SAME')

    # 卷积层2
    conv2d_layer_2 = convolution2d(
    pool_layer_1,
    num_outputs = 64,
    kernel_size = (5, 5),
    activation_fn = tf.nn.relu,
    weights_initializer = tf.random_normal_initializer,
    stride = (1, 1),
    trainable = True)

    pool_layer_2 = tf.nn.max_pool(conv2d_layer_2, ksize = [1, 2, 2, 1],
                    strides = [1, 2, 2, 1],
                    padding = 'SAME')

    flattened_layer_2 = tf.reshape(pool_layer_2, [ batch_size, -1 ])

    # weight_init 参数也可以接收一个可调用参数,这里使用的了一个lambda 表达式返回了一个截断的正态分布,并指定了标准差
    hidden_layer_3 = fully_connected(
    flattened_layer_2,
    512,
    weights_initializer = lambda i, dtype, partition_info: tf.truncated_normal([38912, 512], stddev = 0.1),
    activation_fn = tf.nn.relu
    )

    # 对一些神经元进行dropout,削减他们在模型中的重要性
    hidden_layer_3 = tf.nn.dropout(hidden_layer_3, 0.1)

    # 输出是前面的层与训练中可用的120个不同狗品种的全连接
    final_fully_connected = fully_connected(
    hidden_layer_3,
    120, # 120 种狗
    weights_initializer = lambda i, dtype, partition_info: tf.truncated_normal([512, 120], stddev = 0.1)
    )
    print("graph is ready")
    return final_fully_connected
예제 #2
0
    def encoder(self,x, keep_prob):


        e_conv1 = convolution2d(x, 32, [5,5], [2,2], padding='SAME')
        #print e_conv1
        e_conv2 = convolution2d(e_conv1, 16, [5,5], [2,2], padding='SAME')
        #print e_conv2
        e_flat1 = flatten(e_conv2)
        #print e_flat1
        #e_flat1 = tf.nn.dropout(e_flat1 keep_prob)
        e_fc1 = fully_connected(e_flat1, self.params['final_layer'], None)
        e_fc1 = tf.nn.dropout(e_fc1, keep_prob)
        return e_fc1
예제 #3
0
    def create_shallownet(images, scope=None, net=None, dropout=True):
        """
        Args:
            images: a tensor of shape [B x H x W x C]
            net: An optional dict object
            scope: The variable scope for the subgraph, defaults to ShallowNet

        Returns:
            saliency_output: a tensor of shape [B x 48 x 48]
        """
        assert len(images.get_shape()) == 4  # [B, H, W, C]

        if net is None: net = {}
        else: assert isinstance(net, dict)

        net['dropout_keep_prob'] = tf.placeholder(tf.float32,
                                                  name='dropout_keep_prob')

        with tf.variable_scope(scope or 'ShallowNet'):
            # CONV
            net['conv1'] = convolution2d(
                images,
                32,
                kernel_size=(5, 5),
                stride=(1, 1),
                padding='VALID',
                activation_fn=None,  #tf.nn.relu,
                weights_initializer=initializers.xavier_initializer_conv2d(
                    uniform=True),
                biases_initializer=tf.constant_initializer(0.0),
                variables_collections=['MODEL_VARS'],
                scope='conv1')
            #net['conv1'] = tflearn.layers.batch_normalization(net['conv1'])
            net['conv1'] = tf.nn.relu(net['conv1'])

            net['pool1'] = tf.nn.max_pool(net['conv1'],
                                          ksize=[1, 2, 2, 1],
                                          strides=[1, 2, 2, 1],
                                          padding='SAME',
                                          name='pool1')
            log.info('Conv1 size : %s', net['conv1'].get_shape().as_list())
            log.info('Pool1 size : %s', net['pool1'].get_shape().as_list())

            net['conv2'] = convolution2d(
                net['pool1'],
                64,
                kernel_size=(3, 3),
                stride=(1, 1),
                padding='VALID',
                activation_fn=None,  #tf.nn.relu,
                weights_initializer=initializers.xavier_initializer_conv2d(
                    uniform=True),
                biases_initializer=tf.constant_initializer(0.0),
                variables_collections=['MODEL_VARS'],
                scope='conv2')
            #net['conv2'] = tflearn.layers.batch_normalization(net['conv2'])
            net['conv2'] = tf.nn.relu(net['conv2'])

            net['pool2'] = tf.nn.max_pool(net['conv2'],
                                          ksize=[1, 3, 3, 1],
                                          strides=[1, 2, 2, 1],
                                          padding='SAME',
                                          name='pool2')
            log.info('Conv2 size : %s', net['conv2'].get_shape().as_list())
            log.info('Pool2 size : %s', net['pool2'].get_shape().as_list())

            net['conv3'] = convolution2d(
                net['pool2'],
                32,
                kernel_size=(3, 3),
                stride=(1, 1),
                padding='VALID',
                activation_fn=None,  #tf.nn.relu,
                weights_initializer=initializers.xavier_initializer_conv2d(
                    uniform=True),
                biases_initializer=tf.constant_initializer(0.0),
                variables_collections=['MODEL_VARS'],
                scope='conv3')
            #net['conv3'] = tflearn.layers.batch_normalization(net['conv3'])
            net['conv3'] = tf.nn.relu(net['conv3'])

            net['pool3'] = tf.nn.max_pool(net['conv3'],
                                          ksize=[1, 3, 3, 1],
                                          strides=[1, 2, 2, 1],
                                          padding='SAME',
                                          name='pool3')
            log.info('Conv3 size : %s', net['conv3'].get_shape().as_list())
            log.info('Pool3 size : %s', net['pool3'].get_shape().as_list())

            # FC layer
            n_inputs = int(np.prod(net['pool3'].get_shape().as_list()[1:]))
            pool3_flat = tf.reshape(net['pool3'], [-1, n_inputs])
            net['fc1'] = fully_connected(
                pool3_flat,
                4802,
                activation_fn=None,  #tf.nn.relu,
                weights_initializer=initializers.xavier_initializer(
                    uniform=True),
                biases_initializer=tf.constant_initializer(0.0),
                variables_collections=['MODEL_VARS'],
                scope='fc1')
            log.info('fc1 size : %s', net['fc1'].get_shape().as_list())

            #net['fc1'] = tflearn.layers.batch_normalization(net['fc1'])
            net['fc1'] = tf.nn.relu(net['fc1'])

            if dropout:
                net['fc1'] = tf.nn.dropout(net['fc1'],
                                           net['dropout_keep_prob'])

            fc1_slice1, fc1_slice2 = tf.split(
                net['fc1'], num_or_size_splits=2, axis=1, name='fc1_slice'
            )  #syntax probably wrong here for newer tensorflow version
            net['max_out'] = tf.maximum(fc1_slice1,
                                        fc1_slice2,
                                        name='fc1_maxout')

            log.info('maxout size : %s', net['max_out'].get_shape().as_list())

            net['fc2'] = fully_connected(
                net['max_out'],
                4802,
                activation_fn=None,  # no relu here
                weights_initializer=initializers.xavier_initializer(
                    uniform=True),
                biases_initializer=tf.constant_initializer(0.0),
                variables_collections=['MODEL_VARS'],
                scope='fc2')

            #net['fc2'] = tflearn.layers.batch_normalization(net['fc2'])
            net['fc2'] = tf.nn.relu(net['fc2'])

            #if dropout:
            #    net['fc2'] = tf.nn.dropout( net['fc2'], net['dropout_keep_prob'] )

            log.info('fc2 size : %s', net['fc2'].get_shape().as_list())

            fc2_slice1, fc2_slice2 = tf.split(net['fc2'],
                                              num_or_size_splits=2,
                                              axis=1,
                                              name='fc2_slice')
            net['max_out2'] = tf.maximum(fc2_slice1,
                                         fc2_slice2,
                                         name='fc2_maxout')
            '''
            net['fc3'] = fully_connected(net['max_out2'], 4802,
                                        activation_fn=None, # no relu here
                                        weights_initXializer=initializers.xavier_initializer(uniform=True),
                                        biases_initializer=tf.constant_initializer(0.0),
                                        weight_collections=['MODEL_VARS'], bias_collections=['MODEL_VARS'],
                                        name='fc3')
            #net['fc3'] = tflearn.layers.batch_normalization(net['fc3'])
            net['fc3'] = tf.nn.relu(net['fc3'])


            fc3_slice1, fc3_slice2 = tf.split(1, 2, net['fc3'], name='fc3_slice')
            net['max_out3'] = tf.maximum(fc3_slice1, fc3_slice2, name='fc3_maxout')

            net['max_out3'] = tflearn.layers.batch_normalization(net['max_out3'])
            '''

            #net['fc2'] = tf.nn.dropout( net['fc2'], net['dropout_keep_prob'] )

            #log.info('fc3 size : %s', net['fc3'].get_shape().as_list())

            # debug and summary
            #net['fc1'].get_shape().assert_is_compatible_with([None, 4802])
            #net['fc2'].get_shape().assert_is_compatible_with([None, 4802])
            #net['fc3'].get_shape().assert_is_compatible_with([None, 4802])
            #for t in [self.conv1, self.conv2, self.conv3,
            #          self.pool1, self.pool2, self.pool3,
            #          self.fc1, self.max_out, self.fc2]:
            #    _add_activation_histogram_summary(t)

            net['saliency'] = tf.reshape(net['max_out2'], [-1, 49, 49],
                                         name='saliency')

        return net['saliency']
conv1=tf.layers.conv2d(
    tf.image.convert_image_dtype(x_img,dtype=tf.float32),
    filters=32, # 输出通道由1->32
    kernel_size=(3,3), # 3x3卷积核
    activation=tf.nn.relu,
    padding='SAME',
    kernel_initializer=tf.random_uniform_initializer,
    bias_initializer=tf.random_normal_initializer
)
"""
conv1=convolution2d(
    # tf.image.convert_image_dtype(x_img,dtype=tf.float32),
    x,
    num_outputs=64,
    kernel_size=(3,3),
    activation_fn=tf.nn.relu,
    normalizer_fn=tf.layers.batch_normalization,
    weights_initializer=tf.random_uniform_initializer,
    biases_initializer=tf.random_normal_initializer,
    trainable=True
)

conv1=tf.nn.max_pool(conv1,[1,2,2,1],[1,2,2,1],padding="SAME") # [n,16,16,64]
conv1 = tf.nn.dropout(conv1, keep)
conv1 = tf.nn.lrn(conv1, 4, bias=1.0, alpha=0.001 / 9.0, beta=0.75,
                  name='norm1')

# convolution2
"""
conv2=tf.layers.conv2d(
    conv1,