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
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