[基础网络] ZF Net Keras 实现

def conv2d_maxpool(x, filters, conv_size=(3,3), padding='valid', strides=(1, 1),
              pool_strides =(2,2),pool_size = (3,3)
              name=None):
    x = Conv2D(
        filters, conv_size,
        strides=strides,
        padding=padding,
        use_bias=False,
        name=conv_name)(x)
    #x = BatchNormalization(axis=bn_axis, scale=False, name=bn_name)(x)
    x = Activation('relu', name=name)(x)
    x= MaxPooling2D(pool_size = pool_size,strides = pool_strides)(x)
    return x

class Total_Models():
    def __init__(self, nb_classes):

        self.nb_classes = nb_classes
        metrics = ['accuracy']
        if self.nb_classes >= 10:
        self.model,self.original_model = self.zf_model() 
        optimizer = Adam(lr=1e-5)
        self.model.compile(loss='categorical_crossentropy', optimizer=optimizer,
                           metrics=metrics) #
        print(self.model.summary())
    def zf_model(self):
        inputs = Input(shape=(299,299,3))
        layer_1 = conv2d_maxpool(inputs, 96, conv_size=(7,7), padding='valid', strides=(2, 2),
              pool_strides =(2,2),pool_size = (3,3))
        layer_2 = conv2d_maxpool(layer_1, 256, conv_size=(5,5), padding='valid', strides=(2, 2),
              pool_strides =(2,2),pool_size = (3,3))
        layer_3 = Conv2D(384, (3, 3),strides=1,padding='same',activation= 'relu', use_bias=True, name='layer3')(layer_2)
        layer_4 = Conv2D(384, (3, 3),strides=1,padding='same',activation='relu', use_bias=True, name='layer4')(layer_3)
        layer_5 = conv2d_maxpool(layer_4, 256, conv_size=(5,5), padding='same', strides=(2, 2),
              pool_strides =(2,2),pool_size = (3,3))
        flatten = Flatten()(layer_5)
        layer_6 = Dense(4096,activation = 'relu')(flatten)
        dropout_6 = Dropout(0.5)(layer_6)
        layer_7 = Dense(4096,activation ='relu')(dropout_6)
        dropout_7 = Dropout(0.5)(layer_7)
        layer_8 = Dense(self.nb_classes)(dropout_7)
        model = Model(inputs= inputs,outputs = layer_8)
        parallel_model=multi_gpu_model(model,gpus=4)
        return parallel_model,model

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值