def conv2d_input(x,
                 filter=32,
                 format="NHWC",
                 name="conv_input",
                 batch_normalization=True,
                 layer_list=None):
    """
       conv2d_input
        ### 引数
        x:  object   入力Tensor 
        filter: string    最初のconv2dレイヤーフィルターサイズ。 
                 Noneの場合、入力テンソルチャネルサイズの半分になる。    
        format: string "NHWC"(チャネル先)and "NCHW" for チャネル最後. default は 'NHWC'
        name:  string 名前  デフォルトはconv_input
        batch_normalization: boolean  batch_normalization:するがどうか
        layer_list: list 存在する場合戻り値追加する
        ### 戻り値
        y: object「tensor」。 変換したtensor

    """

    with tf.name_scope(name) as scope:
        x = tf.convert_to_tensor(x)
        input_shape = x.get_shape()
        N, H, W, C = (0, 0, 0, 0)
        if format == "NHWC":
            N, H, W, C = input_shape[0].value, input_shape[
                1].value, input_shape[2].value, input_shape[3].value
        elif format == "NCHW":
            N, C, H, W = input_shape[0].value, input_shape[
                1].value, input_shape[2].value, input_shape[3].value

        filter_1 = filter if filter is not None else C
        y = tf_helper.add_conv2d(x,
                                 filter_1,
                                 h_kernel=3,
                                 w_kernel=3,
                                 name=scope,
                                 h_stride=1,
                                 w_stride=1,
                                 format=format,
                                 batch_normalization=batch_normalization,
                                 activation="leaky_relu",
                                 leaky_relu_alpha=0.1,
                                 padding="SAME")
        print("conv_input : ", y.shape)
        if layer_list is not None:
            layer_list.append(y)
        return y
def feature_out(x,
                classes_num,
                format="NHWC",
                name="feature_out",
                batch_normalization=True,
                layer_list=None):
    """
        feature_out
        ### 引数
        x:  object   入力Tensor 
        filter: string    最初のconv2dレイヤーフィルターサイズ。 Noneの場合、入力テンソルチャネルサイズの半分になる。    
        format: string "NHWC"(チャネル先)and "NCHW" for チャネル最後. default は 'NHWC'
        name: string   名前デフォルトはfeature_out
        batch_normalization: boolean  batch_normalizationするがどうか
        layer_list: list 存在する場合戻り値追加する
        ### 戻り値
        feature : object「tensor」。 変換したtensor
    """

    with tf.name_scope(name) as scope:
        x = tf.convert_to_tensor(x)
        input_shape = x.get_shape()
        if format == "NHWC":
            N, H, W, C = input_shape[0].value, input_shape[
                1].value, input_shape[2].value, input_shape[3].value
        elif format == "NCHW":
            N, C, H, W = input_shape[0].value, input_shape[
                1].value, input_shape[2].value, input_shape[3].value

        filter_1 = (classes_num + 5) * 3

        feature = tf_helper.add_conv2d(x,
                                       filter_1,
                                       h_kernel=1,
                                       w_kernel=1,
                                       name=scope,
                                       h_stride=1,
                                       w_stride=1,
                                       format=format,
                                       batch_normalization=batch_normalization,
                                       activation="linear",
                                       leaky_relu_alpha=0.1,
                                       padding="SAME")
        print("conv_feature : ", feature.shape)
    if layer_list is not None:
        layer_list.append(feature)
    return feature
Esempio n. 3
0
    def __init__(self,
                 input_size=784,
                 mid_units=100,
                 output_size=10,
                 lr=1e-4,
                 keep_prob=0.5,
                 output_op_name='output'):
        super(CONV, self).__init__()
        self.input_size = input_size
        self.mid_units = mid_units
        self.output_size = output_size
        self.lr = lr
        self.output_node_name = output_op_name

        mlp_graph = tf.Graph()
        with mlp_graph.as_default():
            x = tf.placeholder(tf.float32, [None, self.input_size],
                               name='input')
            y_t = tf.placeholder(tf.float32, [None, self.output_size],
                                 name='valid')
            x_image = tf.reshape(x, [-1, 28, 28, 1], name='reshape')
            conv1 = tf_ext.add_conv2d(x_image,
                                      output_size=32,
                                      h_kernel=5,
                                      w_kernel=5,
                                      activation='relu',
                                      name='conv1')
            pool1 = tf_ext.add_pool(conv1, name='pool1')
            conv2 = tf_ext.add_conv2d(pool1,
                                      output_size=64,
                                      h_kernel=5,
                                      w_kernel=5,
                                      activation='relu',
                                      name='conv2')
            pool2 = tf_ext.add_pool(conv2, name='pool2')

            flat = tf_ext.add_flatten(pool2, name='flatten')
            fc1 = tf_ext.add_fc(flat,
                                output_size=1024,
                                activation='relu',
                                name='fc1')
            drop = tf_ext.add_dropout(fc1,
                                      keep_prob=keep_prob,
                                      name='dropout1')
            fc2 = tf_ext.add_fc(drop,
                                self.output_size,
                                activation='relu',
                                name='fc2')
            y = tf.nn.softmax(fc2, name=self.output_node_name)

            with tf.name_scope('train'):
                cross_entropy = -tf.reduce_sum(y_t * tf.log(y))
                train_op = tf.train.AdamOptimizer(
                    learning_rate=self.lr).minimize(cross_entropy)

            with tf.name_scope('predict'):
                correct_prediction = tf.equal(tf.argmax(y, 1),
                                              tf.argmax(y_t, 1))
                predict_op = tf.reduce_mean(
                    tf.cast(correct_prediction, tf.float32))

            # version V2 ファイル新規作成する際にエラーになります。
            # max_to_keep 出力ckpt フィアル数

            saver = tf.train.Saver(write_version=tf.train.SaverDef.V1,
                                   max_to_keep=1)
            pb_saver = tf.train
            init = tf.global_variables_initializer()

        self.graph = mlp_graph
        self.train_op = train_op
        self.predict_op = predict_op
        self.loss_op = cross_entropy
        self.x = x
        self.y = y
        self.y_t = y_t

        self.init = init
        self.saver = saver
        self.pb_saver = pb_saver
def conv2d_5l_block(x,
                    filter=None,
                    format="NHWC",
                    name="conv_5l",
                    batch_normalization=True,
                    layer_list=None):
    """
       conv2d_5l_block
        ### 引数
        x:  object   入力Tensor 
        sub_tensor: string  存在する場合tensorを連結する
        route_dim: object    `0-D `int32`` Tensor`。連結するtensor。
        format: string   "NHWC"(チャネル先) and "NCHW" for チャネル最後. default は 'NHWC'
        name:     string  名前
        batch_normalization: string  Trueまたfalse
        layer_list: list   存在する場合block_conv_1から5まで追加する
        ### 戻り値
        y object「tensor」。 変換したtensor
    """

    with tf.name_scope(name) as scope:
        x = tf.convert_to_tensor(x)
        input_shape = x.get_shape()
        N, H, W, C = (0, 0, 0, 0)
        if format == "NHWC":
            N, H, W, C = input_shape[0].value, input_shape[
                1].value, input_shape[2].value, input_shape[3].value
        elif format == "NCHW":
            N, C, H, W = input_shape[0].value, input_shape[
                1].value, input_shape[2].value, input_shape[3].value

        filter_1 = filter if filter is not None else int(C / 2)
        filter_2 = int(filter_1 * 2)
        filter_3 = filter_1
        filter_4 = int(filter_1 * 2)
        filter_5 = filter_1

        block_conv_1 = tf_helper.add_conv2d(
            x,
            filter_1,
            h_kernel=1,
            w_kernel=1,
            name="layer_1",
            h_stride=1,
            w_stride=1,
            format=format,
            batch_normalization=batch_normalization,
            activation="leaky_relu",
            leaky_relu_alpha=0.1,
            padding="SAME")
        print("conv5l : ", block_conv_1.shape)

        block_conv_2 = tf_helper.add_conv2d(
            block_conv_1,
            filter_2,
            h_kernel=3,
            w_kernel=3,
            name="layer_2",
            h_stride=1,
            w_stride=1,
            format=format,
            batch_normalization=batch_normalization,
            activation="leaky_relu",
            leaky_relu_alpha=0.1,
            padding="SAME")
        print("conv5l : ", block_conv_2.shape)

        block_conv_3 = tf_helper.add_conv2d(
            block_conv_2,
            filter_3,
            h_kernel=1,
            w_kernel=1,
            name="layer_3",
            h_stride=1,
            w_stride=1,
            format=format,
            batch_normalization=batch_normalization,
            activation="leaky_relu",
            leaky_relu_alpha=0.1,
            padding="SAME")
        print("conv5l : ", block_conv_3.shape)

        block_conv_4 = tf_helper.add_conv2d(
            block_conv_3,
            filter_4,
            h_kernel=3,
            w_kernel=3,
            name="layer_4",
            h_stride=1,
            w_stride=1,
            format=format,
            batch_normalization=batch_normalization,
            activation="leaky_relu",
            leaky_relu_alpha=0.1,
            padding="SAME")
        print("conv5l : ", block_conv_4.shape)

        block_conv_5 = tf_helper.add_conv2d(
            block_conv_4,
            filter_5,
            h_kernel=1,
            w_kernel=1,
            name="layer_5",
            h_stride=1,
            w_stride=1,
            format=format,
            batch_normalization=batch_normalization,
            activation="leaky_relu",
            leaky_relu_alpha=0.1,
            padding="SAME")
        print("conv5l : ", block_conv_5.shape)
        y = block_conv_5

        if layer_list is not None:
            layer_list.append(block_conv_1)
            layer_list.append(block_conv_2)
            layer_list.append(block_conv_3)
            layer_list.append(block_conv_4)
            layer_list.append(block_conv_5)
        return y