当前位置:   article > 正文

【深度学习图像识别课程】神经网络系列:(3)keras学生录取优化_试用keras解决三好学生总成绩问题

试用keras解决三好学生总成绩问题
目录

一、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、导入库

  1. # Imports
  2. import numpy as np
  3. import keras
  4. from keras.datasets import imdb
  5. from keras.models import Sequential
  6. from keras.layers import Dense, Dropout, Activation
  7. from keras.preprocessing.text import Tokenizer
  8. import matplotlib.pyplot as plt
  9. %matplotlib inline
  10. 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数据集

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

 

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

所有这些参数说明可以在这里查看。总而言之,最重要的是标蓝的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

  1. keras.preprocessing.text.Tokenizer(num_words=None,
  2. filters='!"#$%&()*+,-./:;<=>?@[\]^_`{|}~\t\n',
  3. lower=True,
  4. split=" ",
  5. 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就是迭代数。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/815739
推荐阅读
相关标签
  

闽ICP备14008679号