美文网首页TensorFlow程序员
keras的基本用法(四)——Fine Tuning神经网络

keras的基本用法(四)——Fine Tuning神经网络

作者: SnailTyan | 来源:发表于2017-06-07 10:03 被阅读820次

    文章作者:Tyan
    博客:noahsnail.com | CSDN | 简书

    本文主要介绍Keras的一些基本用法,主要涉及已有网络的fine tuning,以ResNet50为例。

    • Demo
    #!/usr/bin/env python
    # _*_ coding: utf-8 _*_
    
    from keras.models import Model
    from keras.layers import Dense
    from keras.applications.resnet50 import ResNet50
    from keras.preprocessing.image import ImageDataGenerator
    
    
    # 训练的batch_size
    batch_size = 16
    # 训练的epoch
    epochs = 100
    
    # 图像Generator,用来构建输入数据
    train_datagen = ImageDataGenerator(
            width_shift_range=0.1,
            height_shift_range=0.1,
            zoom_range=0.2,
            horizontal_flip=True)
    
    # 从文件中读取数据,目录结构应为train下面是各个类别的子目录,每个子目录中为对应类别的图像
    train_generator = train_datagen.flow_from_directory('./train', target_size = (224, 224), batch_size = batch_size)
    
    # 训练图像的数量
    image_numbers = train_generator.samples
    
    # 输出类别信息
    print train_generator.class_indices
    
    # 生成测试数据
    test_datagen = ImageDataGenerator()
    validation_generator = test_datagen.flow_from_directory('./validation', target_size = (224, 224), batch_size = batch_size)
    
    # 使用ResNet的结构,不包括最后一层,且加载ImageNet的预训练参数
    base_model = ResNet50(weights = 'imagenet', include_top = False, pooling = 'avg')
    
    # 构建网络的最后一层,3是自己的数据的类别
    predictions = Dense(3, activation='softmax')(base_model.output)
    
    # 定义整个模型
    model = Model(inputs=base_model.input, outputs=predictions)
    
    # 编译模型,loss为交叉熵损失
    model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
    
    # 训练模型
    model.fit_generator(train_generator,steps_per_epoch = image_numbers // batch_size, epochs = epochs, validation_data = validation_generator, validation_steps = batch_size)
    
    # 保存训练得到的模型
    model.save_weights('weights.h5')
    
    • 部分结果
    {'Type_3': 2, 'Type_2': 1, 'Type_1': 0}
    Found 761 images belonging to 3 classes.
    Epoch 1/40
     1/16 [>.............................] - ETA: 119s - loss: 1.33922017-06-07 10:18:48.246289: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 2521 get requests, put_count=2161 evicted_count=1000 eviction_rate=0.462749 and unsatisfied allocation rate=0.579135
    2017-06-07 10:18:48.246348: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 100 to 110
    16/16 [==============================] - 120s - loss: 2.3753 - val_loss: 10.8293
    Epoch 2/40
     1/16 [>.............................] - ETA: 5s - loss: 1.00542017-06-07 10:20:40.464589: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 2270 get requests, put_count=2642 evicted_count=1000 eviction_rate=0.378501 and unsatisfied allocation rate=0.286784
    2017-06-07 10:20:40.464643: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 256 to 281
    16/16 [==============================] - 83s - loss: 1.7988 - val_loss: 11.5219
    Epoch 3/40
    16/16 [==============================] - 81s - loss: 1.6640 - val_loss: 11.0043
    Epoch 4/40
     3/16 [====>.........................] - ETA: 4s - loss: 1.87452017-06-07 10:23:26.725923: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:247] PoolAllocator: After 11057 get requests, put_count=11071 evicted_count=1000 eviction_rate=0.0903261 and unsatisfied allocation rate=0.0945103
    2017-06-07 10:23:26.725986: I tensorflow/core/common_runtime/gpu/pool_allocator.cc:259] Raising pool_size_limit_ from 655 to 720
    16/16 [==============================] - 83s - loss: 1.7237 - val_loss: 11.7738
    Epoch 5/40
    16/16 [==============================] - 83s - loss: 1.6304 - val_loss: 10.6538
    Epoch 6/40
    16/16 [==============================] - 80s - loss: 1.2182 - val_loss: 4.5027
    Epoch 7/40
    16/16 [==============================] - 83s - loss: 1.3179 - val_loss: 11.5891
    Epoch 8/40
    16/16 [==============================] - 82s - loss: 1.1806 - val_loss: 10.5800
    Epoch 9/40
    16/16 [==============================] - 81s - loss: 1.1935 - val_loss: 11.1477
    Epoch 10/40
    16/16 [==============================] - 80s - loss: 1.1727 - val_loss: 7.0913
    Epoch 11/40
    16/16 [==============================] - 83s - loss: 1.2058 - val_loss: 6.4474
    Epoch 12/40
    16/16 [==============================] - 82s - loss: 1.2702 - val_loss: 7.7678
    Epoch 13/40
    16/16 [==============================] - 84s - loss: 1.2060 - val_loss: 7.9961
    Epoch 14/40
    16/16 [==============================] - 83s - loss: 1.0768 - val_loss: 11.2121
    Epoch 15/40
    16/16 [==============================] - 80s - loss: 1.1401 - val_loss: 13.2052
    Epoch 16/40
    16/16 [==============================] - 83s - loss: 1.1961 - val_loss: 13.0330
    

    相关文章

      网友评论

        本文标题:keras的基本用法(四)——Fine Tuning神经网络

        本文链接:https://www.haomeiwen.com/subject/xvsofxtx.html