예제 #1
0
def resnet50(images,
             cfg,
             optimizer,
             trainable=True,
             need_transpose=False,
             model_weight=True,
             bn=True):
    if need_transpose:
        images = flow.transpose(images, name="transpose", perm=[0, 3, 1, 2])

    global NAME_NUMBER
    NAME_NUMBER = 0
    stem = resnet_stem(images, bn, model_weight, optimizer)
    body = resnet_conv_x_body(stem, cfg, bn, model_weight, optimizer,
                              lambda x: x)
    pool5 = flow.nn.avg_pool2d(
        body,
        ksize=7,
        strides=1,
        padding="VALID",
        data_format="NCHW",
        name="pool5",
    )
    pool5 = flow.reshape(pool5, [pool5.shape[0], -1])
    dense0 = flow.layers.dense(
        inputs=pool5,
        units=cfg[4],
        use_bias=True,
        kernel_initializer=flow.xavier_uniform_initializer(),
        bias_initializer=flow.zeros_initializer(),
        trainable=trainable,
        name="dense0",
    )

    def getTypeAndShape(inputs, units):
        in_shape = inputs.shape
        in_num_axes = len(in_shape)
        inputs = (flow.reshape(inputs,
                               (-1,
                                in_shape[-1])) if in_num_axes > 2 else inputs)
        shape = (units, inputs.shape[1])
        dtype = inputs.dtype
        return shape, dtype

    #添加dense层的Model weight
    if model_weight == True:
        shape_list = []
        dtype_list = []
        shape_weight, dtype = getTypeAndShape(pool5, cfg[4])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        modelWeight.addDense(dtype_old=dtype_list,
                             shape=shape_list,
                             optimizer=optimizer,
                             dense_num=1)

    return dense0
예제 #2
0
def dnn_2(input_tensor, cfg, optimizer, model_weight=True, trainable=True):
    input_tensor = flow.reshape(input_tensor, [input_tensor.shape[0], -1])
    dense0 = flow.layers.dense(
        inputs=input_tensor,
        units=cfg[0],
        activation=flow.nn.relu,
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense0")

    dense1 = flow.layers.dense(
        inputs=dense0,
        units=cfg[1],
        activation=None,
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense1")

    def getTypeAndShape(inputs, units):
        in_shape = inputs.shape
        in_num_axes = len(in_shape)
        inputs = (flow.reshape(inputs,
                               (-1,
                                in_shape[-1])) if in_num_axes > 2 else inputs)
        shape = (units, inputs.shape[1])
        dtype = inputs.dtype
        return shape, dtype

    if model_weight == True:
        shape_list = []
        dtype_list = []
        shape_weight, dtype = getTypeAndShape(input_tensor, cfg[0])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        shape_weight, dtype = getTypeAndShape(dense0, cfg[1])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        modelWeight.addDense(dtype_old=dtype_list,
                             shape=shape_list,
                             optimizer=optimizer,
                             dense_num=2)
    return dense1
def vgg(images,
        cfg,
        optimizer,
        trainable=True,
        need_transpose=False,
        training=True,
        wd=1.0 / 32768,
        model_weight=True,
        bn=True):
    if need_transpose:
        images = flow.transpose(images, name="transpose", perm=[0, 3, 1, 2])
    conv1 = _conv_block(images, 0, cfg, 2, optimizer, model_weight, bn=bn)
    pool1 = flow.nn.max_pool2d(conv1[-1], 2, 2, "VALID", "NCHW", name="pool1")

    conv2 = _conv_block(pool1, 2, cfg, 2, optimizer, model_weight, bn=bn)
    pool2 = flow.nn.max_pool2d(conv2[-1], 2, 2, "VALID", "NCHW", name="pool2")

    conv3 = _conv_block(pool2, 4, cfg, 3, optimizer, model_weight, bn=bn)
    pool3 = flow.nn.max_pool2d(conv3[-1], 2, 2, "VALID", "NCHW", name="pool3")

    conv4 = _conv_block(pool3, 7, cfg, 3, optimizer, model_weight, bn=bn)
    pool4 = flow.nn.max_pool2d(conv4[-1], 2, 2, "VALID", "NCHW", name="pool4")

    conv5 = _conv_block(pool4, 10, cfg, 3, optimizer, model_weight, bn=bn)
    pool5 = flow.nn.max_pool2d(conv5[-1], 2, 2, "VALID", "NCHW", name="pool5")

    pool5 = flow.reshape(pool5, [pool5.shape[0], -1])
    dense0 = flow.layers.dense(
        inputs=pool5,
        units=cfg[13],
        activation=flow.nn.relu,
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense0",
    )

    dense1 = flow.layers.dense(
        inputs=dense0,
        units=cfg[14],
        activation=flow.nn.relu,
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense1",
    )

    dense2 = flow.layers.dense(
        inputs=dense1,
        units=cfg[15],
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense2",
    )

    #    flow.watch(fc8)

    def getTypeAndShape(inputs, units):
        in_shape = inputs.shape
        in_num_axes = len(in_shape)
        inputs = (flow.reshape(inputs,
                               (-1,
                                in_shape[-1])) if in_num_axes > 2 else inputs)
        shape = (units, inputs.shape[1])
        dtype = inputs.dtype
        return shape, dtype

    if model_weight == True:
        shape_list = []
        dtype_list = []
        shape_weight, dtype = getTypeAndShape(pool5, cfg[13])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        shape_weight, dtype = getTypeAndShape(dense0, cfg[14])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        shape_weight, dtype = getTypeAndShape(dense1, cfg[15])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        modelWeight.addDense(dtype_old=dtype_list,
                             shape=shape_list,
                             optimizer=optimizer,
                             dense_num=3)

    # shape_weight,dtype=getTypeAndShape(pool5,4096)
    # modelWeight.add('fc1'+'-weight',dtype,shape_weight)
    # modelWeight.add('fc1'+'-bias',dtype,(4096,))

    # shape_weight,dtype=getTypeAndShape(fc6,4096)
    # modelWeight.add('fc2'+'-weight',dtype,shape_weight)
    # modelWeight.add('fc2'+'-bias',dtype,(4096,))

    # shape_weight,dtype=getTypeAndShape(fc7,1000)
    # modelWeight.add('fc_final'+'-weight',dtype,shape_weight)
    # modelWeight.add('fc_final'+'-bias',dtype,(1000,))

    return dense2
def lenet(images, cfg, optimizer, trainable=True, need_transpose=False, 
          training=True, wd=1.0/32768, model_weight=True, bn=True):
    if need_transpose:
        images = flow.transpose(images, name="transpose", perm=[0, 3, 1, 2])
    conv0 = conv2d_layer(name="conv0", input=images, filters=cfg[0], kernel_size=5,
                         padding="VALID", strides=1, bn=bn)
    pool0 = flow.nn.max_pool2d(conv0, 2, 2, "VALID", "NCHW", name="pool0")

    conv1 = conv2d_layer(name="conv1", input=pool0, filters=cfg[1], kernel_size=5,
                         padding="VALID", strides=1, bn=bn)    
    pool1 = flow.nn.max_pool2d(conv1, 2, 2, "VALID", "NCHW", name="pool1")
       
    pool1 = flow.reshape(pool1, [pool1.shape[0], -1])
    # pool1 = flow.reshape(images, [images.shape[0], -1])
    dense0 = flow.layers.dense(
        inputs=pool1,
        units=cfg[2],
        activation=flow.nn.relu,
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense0")

    dense1 = flow.layers.dense(
        inputs=dense0,
        units=cfg[3],
        activation=flow.nn.relu,
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense1")
    
    dense2 = flow.layers.dense(
        inputs=dense1,
        units=cfg[4],
        use_bias=True,
        kernel_initializer=flow.random_normal_initializer(mean=0, stddev=0.1),
        trainable=trainable,
        name="dense2")
#    flow.watch(fc8)
    
    def getTypeAndShape(inputs,units):
        in_shape = inputs.shape
        in_num_axes = len(in_shape)
        inputs = (flow.reshape(inputs, (-1, in_shape[-1])) if in_num_axes > 2 else inputs)
        shape=(units, inputs.shape[1])
        dtype=inputs.dtype
        return shape,dtype
    
    if model_weight == True:
        modelWeight.addConv(index=0, dtype=conv0.dtype,
                            shape1=(cfg[0], images.shape[1], 5, 5), shape2=(cfg[0],),
                            optimizer=optimizer)
        modelWeight.addConv(index=1, dtype=conv1.dtype,
                            shape1=(cfg[1], conv0.shape[1], 5, 5), shape2=(cfg[1],),
                            optimizer=optimizer)      
        shape_list = []
        dtype_list = []
        shape_weight, dtype = getTypeAndShape(pool1, cfg[2])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        shape_weight, dtype = getTypeAndShape(dense0, cfg[3])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        shape_weight, dtype = getTypeAndShape(dense1, cfg[4])
        shape_list.append(shape_weight)
        dtype_list.append(dtype)
        modelWeight.addDense(dtype_old=dtype_list, shape=shape_list,
                             optimizer=optimizer, dense_num=3)

    return dense2