前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >深度学习-使用预设计的模型预测

深度学习-使用预设计的模型预测

作者头像
火星娃统计
发布于 2020-09-15 07:20:00
发布于 2020-09-15 07:20:00
71800
代码可运行
举报
文章被收录于专栏:火星娃统计火星娃统计
运行总次数:0
代码可运行

使用预设计的模型预测

概述

通常对于神经网络来说,如果自己训练将会非常的费时间,有一种方法就是用别人在大样本上训练好的数据,然后使用在自己的网络上,比如,我们的分类目标是猫和狗的分类,如果存在一种大数据的动物分类器,那么就可以实现我们猫和狗分类的目的 有两种方式实现

  • 特征提取
  • 微调模型

特征提取

特征提取是使用之前网络学到的特征来从新样本中提取出需要的特征 神经网络由卷积核和最后的分类器组成,一般特征提取使用的是训练好的卷积核

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from keras.applications import VGG16
# VGG16是一个网络框架
conv_base = VGG16(weights='imagenet',#指定模型初始化的权重检查点。
                    include_top=False,#指定模型最后是否包含密集连接分类器
                    input_shape=(150, 150, 3))# 输入图片的张量,长宽和深度
conv_base.summary()# 查看生成的模型
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Using TensorFlow backend.


Downloading data from https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5
58892288/58889256 [==============================] - 25s 0us/step
Model: "vgg16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         (None, 150, 150, 3)       0
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 150, 150, 64)      1792
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 150, 150, 64)      36928
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 75, 75, 64)        0
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 75, 75, 128)       73856
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 75, 75, 128)       147584
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 37, 37, 128)       0
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 37, 37, 256)       295168
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 37, 37, 256)       590080
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 37, 37, 256)       590080
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 18, 18, 256)       0
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 18, 18, 512)       1180160
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 18, 18, 512)       2359808
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 18, 18, 512)       2359808
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 9, 9, 512)         0
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 9, 9, 512)         2359808
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 9, 9, 512)         2359808
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 9, 9, 512)         2359808
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 4, 4, 512)         0
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0
_________________________________________________________________

可以看出模型由多个卷积层和池化层组成

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 使用预设计的卷积核提取特征
import os
import numpy as np
from keras.preprocessing.image import ImageDataGenerator# 导入生成器
# 定义路径
base_dir = '/home/sunqi/python_study/cats_and_dogs_small'
train_dir = os.path.join(base_dir, 'train')
validation_dir = os.path.join(base_dir, 'validation')
test_dir = os.path.join(base_dir, 'test')

datagen = ImageDataGenerator(rescale=1./255)
batch_size = 20

# 定义函数
def extract_features(directory, sample_count):
    features = np.zeros(shape=(sample_count, 4, 4, 512))# 建立一个空矩阵存储特征
    labels = np.zeros(shape=(sample_count))
    generator = datagen.flow_from_directory(#生成器
        directory,#路径
        target_size=(150, 150),
        batch_size=batch_size,
        class_mode='binary')
    i = 0
    for inputs_batch, labels_batch in generator:#生成器
        features_batch = conv_base.predict(inputs_batch)#用预先训练好的模型生成特征
        features[i * batch_size : (i + 1) * batch_size] = features_batch#按迭代大小分次存储
        labels[i * batch_size : (i + 1) * batch_size] = labels_batch
        i += 1
        if i * batch_size >= sample_count:#设置终止条件
            break
    return features, labels# 函数返回的值

train_features, train_labels = extract_features(train_dir, 2000)
validation_features, validation_labels = extract_features(validation_dir, 1000)
test_features, test_labels = extract_features(test_dir, 1000)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Found 2000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 现在提取的特征为(n, 4, 4, 512)
# 将提取的特征进行展开
train_features = np.reshape(train_features, (2000, 4 * 4 * 512))
validation_features = np.reshape(validation_features, (1000, 4 * 4 * 512))
test_features = np.reshape(test_features, (1000, 4 * 4 * 512))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 定义分类层
from keras import models
from keras import layers
from keras import optimizers

model = models.Sequential()
model.add(layers.Dense(256, activation='relu', input_dim=4 * 4 * 512))#输入层
model.add(layers.Dropout(0.5))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer=optimizers.RMSprop(lr=2e-5),#优化器
            loss='binary_crossentropy',
            metrics=['acc'])
history = model.fit(train_features, train_labels,
                    epochs=30,
                    batch_size=20,
                    validation_data=(validation_features, validation_labels))
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Train on 2000 samples, validate on 1000 samples
Epoch 1/30
2000/2000 [==============================] - 1s 449us/step - loss: 0.6243 - acc: 0.6520 - val_loss: 0.4484 - val_acc: 0.8310
Epoch 2/30
2000/2000 [==============================] - 1s 350us/step - loss: 0.4355 - acc: 0.8050 - val_loss: 0.3676 - val_acc: 0.8560
Epoch 3/30
2000/2000 [==============================] - 1s 365us/step - loss: 0.3720 - acc: 0.8390 - val_loss: 0.3299 - val_acc: 0.8740
Epoch 4/30
2000/2000 [==============================] - 1s 375us/step - loss: 0.3248 - acc: 0.8645 - val_loss: 0.3068 - val_acc: 0.8840
Epoch 5/30
2000/2000 [==============================] - 1s 345us/step - loss: 0.2908 - acc: 0.8860 - val_loss: 0.2841 - val_acc: 0.8870
Epoch 6/30
2000/2000 [==============================] - 1s 350us/step - loss: 0.2700 - acc: 0.8935 - val_loss: 0.2775 - val_acc: 0.8940
Epoch 7/30
2000/2000 [==============================] - 1s 347us/step - loss: 0.2480 - acc: 0.9040 - val_loss: 0.2650 - val_acc: 0.8940
Epoch 8/30
2000/2000 [==============================] - 1s 350us/step - loss: 0.2287 - acc: 0.9145 - val_loss: 0.2694 - val_acc: 0.8910
Epoch 9/30
2000/2000 [==============================] - 1s 366us/step - loss: 0.2221 - acc: 0.9140 - val_loss: 0.2526 - val_acc: 0.9030
Epoch 10/30
2000/2000 [==============================] - 1s 356us/step - loss: 0.2195 - acc: 0.9180 - val_loss: 0.2489 - val_acc: 0.9020
Epoch 11/30
2000/2000 [==============================] - 1s 351us/step - loss: 0.2061 - acc: 0.9230 - val_loss: 0.2455 - val_acc: 0.9020
Epoch 12/30
2000/2000 [==============================] - 1s 352us/step - loss: 0.1967 - acc: 0.9245 - val_loss: 0.2446 - val_acc: 0.9020
Epoch 13/30
2000/2000 [==============================] - 1s 344us/step - loss: 0.1852 - acc: 0.9285 - val_loss: 0.2399 - val_acc: 0.9030
Epoch 14/30
2000/2000 [==============================] - 1s 348us/step - loss: 0.1794 - acc: 0.9375 - val_loss: 0.2385 - val_acc: 0.9050
Epoch 15/30
2000/2000 [==============================] - 1s 343us/step - loss: 0.1727 - acc: 0.9380 - val_loss: 0.2384 - val_acc: 0.9030
Epoch 16/30
2000/2000 [==============================] - 1s 355us/step - loss: 0.1650 - acc: 0.9410 - val_loss: 0.2370 - val_acc: 0.9060
Epoch 17/30
2000/2000 [==============================] - 1s 353us/step - loss: 0.1533 - acc: 0.9455 - val_loss: 0.2392 - val_acc: 0.9030
Epoch 18/30
2000/2000 [==============================] - 1s 365us/step - loss: 0.1484 - acc: 0.9470 - val_loss: 0.2343 - val_acc: 0.9050
Epoch 19/30
2000/2000 [==============================] - 1s 366us/step - loss: 0.1470 - acc: 0.9500 - val_loss: 0.2386 - val_acc: 0.9060
Epoch 20/30
2000/2000 [==============================] - 1s 368us/step - loss: 0.1374 - acc: 0.9540 - val_loss: 0.2345 - val_acc: 0.9030
Epoch 21/30
2000/2000 [==============================] - 1s 372us/step - loss: 0.1291 - acc: 0.9580 - val_loss: 0.2319 - val_acc: 0.9050
Epoch 22/30
2000/2000 [==============================] - 1s 390us/step - loss: 0.1339 - acc: 0.9535 - val_loss: 0.2454 - val_acc: 0.8990
Epoch 23/30
2000/2000 [==============================] - 1s 354us/step - loss: 0.1194 - acc: 0.9600 - val_loss: 0.2353 - val_acc: 0.9060
Epoch 24/30
2000/2000 [==============================] - 1s 349us/step - loss: 0.1166 - acc: 0.9615 - val_loss: 0.2354 - val_acc: 0.9070
Epoch 25/30
2000/2000 [==============================] - 1s 350us/step - loss: 0.1182 - acc: 0.9600 - val_loss: 0.2326 - val_acc: 0.9050
Epoch 26/30
2000/2000 [==============================] - 1s 352us/step - loss: 0.1112 - acc: 0.9635 - val_loss: 0.2325 - val_acc: 0.9040
Epoch 27/30
2000/2000 [==============================] - 1s 347us/step - loss: 0.1092 - acc: 0.9640 - val_loss: 0.2337 - val_acc: 0.9050
Epoch 28/30
2000/2000 [==============================] - 1s 348us/step - loss: 0.1020 - acc: 0.9670 - val_loss: 0.2373 - val_acc: 0.9040
Epoch 29/30
2000/2000 [==============================] - 1s 352us/step - loss: 0.0975 - acc: 0.9710 - val_loss: 0.2404 - val_acc: 0.9060
Epoch 30/30
2000/2000 [==============================] - 1s 347us/step - loss: 0.0956 - acc: 0.9690 - val_loss: 0.2377 - val_acc: 0.9030

因为只涉及后面的分类层,所以运算非常快

绘图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
acc = history.history['acc']
val_acc = history.history['val_acc']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(1, len(acc) + 1)
plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.title('Training and validation accuracy')
plt.legend()
plt.figure()
plt.plot(epochs, loss, 'bo', label='Training loss')
plt.plot(epochs, val_loss, 'b', label='Validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()

可以看出验证集的精确度达到了val_acc: 0.9030

微调模型

相比较特征提取,微调模型可以针对模型中个别层进行修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
conv_base.trainable = True #解冻
set_trainable = False
for layer in conv_base.layers:
    if layer.name == 'block5_conv1':#对block5_conv1开始进行解冻
        set_trainable = True
    if set_trainable:
        layer.trainable = True
    else:
        layer.trainable = False
## 最后通过训练模型达到微调训练的目的

结束语

对于卷积神经网络的内容基本就是这些,虽然学习来容易,但是用到自己的数据就会出问题,就这样吧

love&peace

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 火星娃统计 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习100例-卷积神经网络(VGG-19)识别灵笼中的人物 | 第7天
本文将实现灵笼中人物角色的识别。较上一篇文章,这次我采用了VGG-19结构,并增加了预测与保存and加载模型两个部分。
K同学啊
2021/06/10
1.6K0
深度学习100例-卷积神经网络(VGG-19)识别灵笼中的人物 | 第7天
Deep learning with Python 学习笔记(3)
想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络。预训练网络(pretrained network)是一个保存好的网络,之前已在大型数据集(通常是大规模图像分类任务)上训练好
范中豪
2019/09/10
6320
Deep learning with Python 学习笔记(3)
使用预先训练网络和特征抽取大力提升图像识别率
神经网络在项目实践中遇到的一大问题是数据不足。任何人工智能项目,在数据不足面前都会巧妇难为无米之炊,算法再精巧,只要数据量不足,最后的效果都不尽如人意,我们目前正在做的图像识别就是如此,要想让网络准确的识别猫狗图片,没有几万张图片以上是做不到的。
望月从良
2018/08/16
8540
使用预先训练网络和特征抽取大力提升图像识别率
从零开始学keras(八)
  想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络。预训练网络(pretrained network)是一个保存好的网络,之前已在大型数据集(通常是大规模图像分类任务)上训练好。如果这个原始数据集足够大且足够通用,那么预训练网络学到的特征的空间层次结构可以有效地作为视觉世界的通用模型,因此这些特征可用于各种不同的计算机视觉问题,即使这些新问题涉及的类别和原始任务完全不同。举个例子,你在 ImageNet 上训练了一个网络(其类别主要是动物和日常用品),然后将这个训练好的网络应用于某个不相干的任务,比如在图像中识别家具。这种学到的特征在不同问题之间的可移植性,是深度学习与许多早期浅层学习方法相比的重要优势,它使得深度学习对小数据问题非常有效。
墨明棋妙27
2022/08/24
5910
从零开始学keras(八)
使用深度学习进行疟疾检测 | PyTorch版
蚊子看起来很小,很脆弱,但是是非常危险的。众所周知,疟疾对所有年龄段的人来说都是一种威胁生命的疾病,它通过蚊子传播。更重要的是,在最初的阶段,这些症状很容易被误认为是发烧、流感或普通感冒。但是,在晚期,它可以通过感染和破坏细胞结构造成严重破坏,这可能危及生命。如果不及时治疗,甚至可能导致死亡。
小白学视觉
2020/11/13
8430
使用深度学习进行疟疾检测 | PyTorch版
迁移学习全面指南:概念、应用、优势、挑战
【编者按】Springboard AI顾问、前Intel数据科学家Dipanjan (DJ) Sarkar全面介绍了迁移学习的概念、应用、优势、挑战,重点关注深度迁移学习。
zenRRan
2019/11/20
2.4K0
迁移学习全面指南:概念、应用、优势、挑战
[Deep-Learning-with-Python]计算机视觉中的深度学习
卷积网络接收(image_height,image_width,image_channels)形状的张量作为输入(不包括batch size)。MNIST中,将图片转换成(28,28,1)形状,然后在第一层传递input_shape参数。 显示网络架构
用户1631856
2018/08/01
2.2K0
[Deep-Learning-with-Python]计算机视觉中的深度学习
Tensorflow2——卷积神经网络的搭建
***** 以下有关代码全是在jupyter notebook 里面调试完后曾,如果直接复制粘贴到pycharm可能不太行,自己得改改
Albert_xiong
2021/06/21
1.3K0
Tensorflow2——卷积神经网络的搭建
关于深度学习系列笔记十二(关于猫狗判断实验)
首先小小的庆祝一下自己的微信公众号订阅用户已达到100人了,是小小的虚荣心也是收获也是鞭策,希望自己砥砺前行,努力进步,做到更好。
python与大数据分析
2022/03/11
5020
关于深度学习系列笔记十二(关于猫狗判断实验)
[深度应用]·主流深度学习硬件速度对比(CPU,GPU,TPU)
我们基于CNN实现Cifar10 数据集分类把这段相同的代码在不同主流深度学习进行测试,得到训练速度的对比数据。
小宋是呢
2019/06/27
2.3K0
深度学习实战-CNN猫狗识别
本文记录了第一个基于卷积神经网络在图像识别领域的应用:猫狗图像识别。主要内容包含:
皮大大
2023/08/23
7390
机器学习 | 猫狗大战
对于机器学习来说,数据的重要性无可厚非,大部分处理机器学习的问题都是在处理数据,包括数据的清洗,归一化等,好的数据质量能大大提高模型的预测性能
机器视觉CV
2019/07/15
1.5K0
机器学习 | 猫狗大战
深度学习实战 | 使用Kera预测人物年龄
01 问题描述 我们的任务是从一个人的面部特征来预测他的年龄(用“Young”“Middle ”“Old”表示),我们训练的数据集大约有19906多张照片及其每张图片对应的年龄(全是阿三的头像。。。),测试集有6636张图片,首先我们加载数据集,然后我们通过深度学习框架Keras建立、编译、训练模型,预测出6636张人物头像对应的年龄。 02 引入所需要的模块 import os import random import pandas as pd import numpy as np from PIL im
用户1332428
2018/03/09
1.7K0
深度学习实战 | 使用Kera预测人物年龄
Python 深度学习第二版(GPT 重译)(三)
您现在对 Keras 有了一些经验——您熟悉 Sequential 模型、Dense 层以及用于训练、评估和推断的内置 API——compile()、fit()、evaluate() 和 predict()。您甚至在第三章中学习了如何从 Layer 类继承以创建自定义层,以及如何使用 TensorFlow 的 GradientTape 实现逐步训练循环。
ApacheCN_飞龙
2024/03/21
3890
Python 深度学习第二版(GPT 重译)(三)
深度学习图片分类CNN模板
其中A,B,C都代表label,三个文件夹存在具体的图片。只要是这样类型的,直接套下面模板。
润森
2022/09/22
1.1K0
深度学习图片分类CNN模板
[Keras深度学习浅尝]实战二·CNN实现Fashion MNIST 数据集分类
与我们上篇博文[Keras深度学习浅尝]实战一结构相同,修改的地方有,定义网络与模型训练两部分,可以对比着来看。通过使用CNN结构,预测准确率略有提升,可以通过修改超参数以获得更优结果。 代码部分
小宋是呢
2019/06/27
1.3K0
keras系列︱图像多分类训练与利用bottleneck features进行微调(三)
该文摘要总结:利用卷积神经网络来对图像进行特征提取和分类,使用预训练的VGG16网络作为基础网络,通过修改网络结构以适应自己的数据集,并使用合成数据集进行训练。在训练过程中,使用了数据增强技术,包括旋转、翻转和水平翻转等,以提高模型的性能。最终,该模型在测试集上获得了85.43%的准确率,表现良好。
悟乙己
2018/01/02
4.4K0
keras系列︱图像多分类训练与利用bottleneck features进行微调(三)
[Keras深度学习浅尝]实战四· Embedding实现 IMDB数据集影评文本分类
网络模型的介绍: 1,输入网络的形状为(-1,256) 2,Embedding后为(-1,256,16)网络参数为(10000,16) 3,GlobalAveragePooling1D后为(-1,16)详细介绍见此 4,Dense1后(-1,16)网络参数为w:1616 + b:116 共计272 4,Dense2后(-1,1)网络参数为w:161 + b:11 共计17个参数
小宋是呢
2019/06/27
1.3K0
[Keras深度学习浅尝]实战四· Embedding实现 IMDB数据集影评文本分类
第一个深度学习实战案例:电影评论分类
这是一个典型的二分类问题。使用的是IMDB数据集,训练集是25000条,测试也是25000条
皮大大
2022/04/02
5190
第一个深度学习实战案例:电影评论分类
深度学习检测疟疾
欢迎来到AI for Social Good系列,将重点关注人工智能(AI)与流行的开源工具,技术和框架如何用于发展和改善社会的不同方面。“健康就是财富”也许是一个陈词滥调,但却非常真实!在这篇特别的文章中,将研究如何利用AI来检测疟疾,这是一种致命的疾病,并且有望建立一个低成本,有效和准确的开源解决方案。本文的目的是双重的 - 了解致命疾病疟疾的动机和重要性以及深度学习在检测疟疾方面的有效性。将在本文中介绍以下主要主题:
代码医生工作室
2019/06/21
1.1K0
深度学习检测疟疾
推荐阅读
相关推荐
深度学习100例-卷积神经网络(VGG-19)识别灵笼中的人物 | 第7天
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验