【深度学习图像识别课程】项目实战二:学生录取优化(keras优化/IMDB数据集/one-hot编码)

目录

一、keras优化方法介绍

1、SGD随机梯度下降

2、Adam自适应动量估计

3、RMSProp

二、优化的实战项目:学生录取
1、加载数据

2、数据查看

3、one-hot编码

4、建立模型

5、训练模型

6、评估模型


一、keras优化方法简介

1、SGD随即梯度下降

     使用如下三个参数:(1)学习速率

                                  (2)动量:获取前几步的加权平均值,不至于陷于局部最小点

                                  (3)Nesterov动量:当最接近解决方案时,它会减缓梯度

2、Adam Adaptive Movement Estimation

    使用更复杂的指数衰减。有2个动量:(1)第一个跟SGD一样,前几步的平均值;

                                                         (2)第二个是前几步的方差。

3、RMSProp

     RMS:均方根误差。指数衰减的平方梯度均值来减小学习速率。


二、优化的实战项目:学生录取

0、导入库
# Imports
import numpy as np
import keras
from keras.datasets import imdb
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation
from keras.preprocessing.text import Tokenizer
import matplotlib.pyplot as plt
%matplotlib inline

np.random.seed(42)

(1)keras.datasets (参考文章:keras数据集介绍)有几个常用的数据库,其中就有一个是IMDB电影评论库。

(2)keras.preprocessing.text (参考文章:文本预处理tokenizerkeras中文文档-tokenizer

       自然语言需要进行预处理,preprocessing.text主要有4个模块:

  • 句子分割:keras.preprocessing.text.text_to_word_sequence
  • one-hot编码:keras.preprocessing.text.one_hot
  • 特征哈希:keras.preprocessing.text.hashing_trick
  • 分词器Tokenizerkeras.preprocessing.text.Tokenizer

     

(1)IMDB数据集

from keras.datasets import imdb
(x_train, y_train), (x_test, y_test) = imdb.load_data(path="imdb.npz",
                                                     num_words=None,
                                                     skip_top=0,
                                                     maxlen=None,
                                                     seed=113,
                                                     start_char=1,
                                                     oov_char=2,
                                                     index_from=3)

imdb:IMDB数据集,有25000条电影评论,正面评价标记为1,负面评价标记为0。

所有这些参数说明可以在这里查看。总而言之,最重要的是标蓝的2个参数:

  • path数据存放位置,如果本地没有,会从网络下载
  • num_words :要考虑的最常见的单词。如果你不想考虑一些很晦涩的词汇,比如“Ultracrepidarian”,这会很有用。
  • skip_top :忽略的热门词汇。如果你不想考虑最常见的词,这会很有用。比如,单词“the”将不会在评论中添加任何信息,所以我们可以通过将skip_top 设置为 2 或更高来跳过它。
  • maxlen:序列最大长度,如果有超过maxlen的序列,会进行截断。None表示不限制长度。
  • seed:数据再生的种子
  • start_char:序列开始的标记
  • oov_char:被去掉的单词(比如因为num_words的限制,或者skip_top的限制)就用这个字符代替
  • index_from:找到当前索引和大于当前索引的词



每条评论都是用数字1-1000来表示的。



(1)分词器234分词器Tokenizer

keras.preprocessing.text.Tokenizer(num_words=None,
                                   filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n',
                                   lower=True,
                                   split=" ",
                                   char_level=False)

Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类。

构造参数

  • text_to_word_sequence同名参数含义相同

  • num_words:None或整数,处理的最大单词数量。若被设置为整数,则分词器将被限制为待处理数据集中最常见的num_words个单词

  • char_level: 如果为 True, 每个字符将被视为一个标记

类方法

  • fit_on_texts(texts)

    • texts:要用以训练的文本列表
  • texts_to_sequences(texts)

    • texts:待转为序列的文本列表

    • 返回值:序列的列表,列表中每个序列对应于一段输入文本

  • texts_to_sequences_generator(texts)

    • 本函数是texts_to_sequences的生成器函数版

    • texts:待转为序列的文本列表

    • 返回值:每次调用返回对应于一段输入文本的序列

  • texts_to_matrix(texts, mode):

    • texts:待向量化的文本列表

    • mode:‘binary’,‘count’,‘tfidf’,‘freq’之一,默认为‘binary’

    • 返回值:形如(len(texts), nb_words)的numpy array

  • fit_on_sequences(sequences):

    • sequences:要用以训练的序列列表
  • sequences_to_matrix(sequences):

    • sequences:待向量化的序列列表

    • mode:‘binary’,‘count’,‘tfidf’,‘freq’之一,默认为‘binary’

    • 返回值:形如(len(sequences), nb_words)的numpy array

属性

  • word_counts:字典,将单词(字符串)映射为它们在训练期间出现的次数。仅在调用fit_on_texts之后设置。
  • word_docs: 字典,将单词(字符串)映射为它们在训练期间所出现的文档或文本的数量。仅在调用fit_on_texts之后设置。
  • word_index: 字典,将单词(字符串)映射为它们的排名或者索引。仅在调用fit_on_texts之后设置。
  • document_count: 整数。分词器被训练的文档(文本或者序列)数量。仅在调用fit_on_texts或fit_on_sequences之后设置。

(2)utils工具(参考文章:keras英文文档-utilskeras中文文档-utils

  • keras.utils.to_categorical(y, num_classes=None) 将0-num类别向量映射成二值类别矩阵。






每一次epoch就完全测试所有的样本

batch_size个数据就是一个迭代,每一次迭代更新一次权重。样本总数/batch_size就是迭代数。



猜你喜欢

转载自blog.csdn.net/weixin_41770169/article/details/80190285