deep learning with python学习记录

已经看到第五章发现内容越来越有点难度,代码运行中因为个人电脑配置差异,及软件版本的不同会出现各种问题,再次记录一下我在学习过程中遇到的问题,争取每个工作日更新。

  1. 利用预训练网络进行特征提取及微调
  • 卷积神经网络的可视化

 

2020/09/08(补)

今日的学子内容主要是5.3利用已有网络进行特征提取微调。

利用预训练好的网络进行特征提取主要有两种方法:

1.去掉预训练网络的Dense层,用到的命令为

include_top=False:
conv_base = VGG16(weights='imagenet',#指定模型初始化的权重检查点
                  include_top=False,# 指定模型最后是否包含密集连接分类器
                  input_shape=(150,150,3)

然后将样本输入到conv_base网络中输出即为特征

features_batch = conv_base.predict(inputs_batch)

之后再这个输出特征的基础上构建分类网络并用这些特征训练该网络即可。

缺点:不能使用数据增强,性能有限

2. 可以使用数据增强的特征提取,即扩展conv_base模型并训练

from keras.applications.vgg16 import VGG16
conv_base = VGG16(weights='imagenet',#指定模型初始化的权重检查点
                  include_top=False,# 指定模型最后是否包含密集连接分类器
                  input_shape=(150,150,3)
                  )
'''在卷积基上添加一个密集连接分类器'''
from keras import models
from keras import layers
model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256,activation='relu'))

model.add(layers.Dense(1,activation='sigmoid'))
model.summary()

'''冻结conv_base'''
conv_base.trainable = False

优点:利用数据增强增多了训练样本数,使得新增加的分类网络的性能比较优于第1种方法

缺点:网络性能提升有限,因为conv——base中的参数并未进行调整

3.网络微调

该方案是在第2种方法基础之上的改进,记住一定要先冻结conv_base,训练出分类网络后再解冻conv_中的某些层进行微调。

冻结conv_中的某些层,解冻一些层并进行训练代码如下:

conv_base.trainable = True

set_trainable = False
for layer in conv_base.layers:
    if layer.name == 'block5_conv1':
        set_trainable = True
    if set_trainable:
        layer.trainable = True
    else:
        layer.trainable = False

''' 微调模型'''
model.compile(loss='binary_crossentropy',
              optimizer=optimizers.RMSprop(lr=1e-5),
              metrics=['acc'])
history = model.fit(
    train_generator,
    steps_per_epoch=100,
    epochs=100,
    validation_data=validation_generator,
    validation_steps=50
)

 

在这个过程中我发现我运行出来的结果并不像书中给出的实验结果那样好,差4% 吧

2020/09/09 

开始第7章学习,因为我的研究方向主要是图像处理,因此先跳过第六章

解决办法:百度说是GPU被占用,在代码前加上如下几句话就OK了

import os
import tensorflow as tf
os.environ["CUDA_VISIBLE_DEVICES"] = '0'
config = tf.compat.v1.ConfigProto(allow_soft_placement=True)
config.gpu_options.allow_growth = True
sess=tf.compat.v1.Session(config=config)

看来以后程序中要经常加这几句话了

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值