Python深度学习笔记(三)二分类模型

继续来写我的学习笔记 -----二分类问题
我从数据的处理,模型的构架,训练过程,验证模型及损失和精度的比较这几个方面来介绍。

一,数据的处理

一个典型的二分类问题的例子:根据电影的评论的文字内容将评论的文字划分为正面和负面。
我们使用IMDB数据集,它包含50000条严重两极分化的评论,数据集被分为用于训练和测试的数据各25000条。数据集和测试集都包含50%的正面评论和50%的负面评论。
下列代码将会加载IMDB数据集:

from keras.datasets import  imdb(train_data,train_labels),(test_data,test_labels) = imdb.load_data(num_words=10000)

参数num_words=10000的意思是仅保留训练数据前10000个常见的单词。低频单词将被舍弃。
train_data和test_data这两个变量是评论组成的列表,每条评论又是单词索引组成的列表。train_labels和test_labels都是0和1组成的列表。0代表负面,1代表正面。这一步是下载数据,接下来我们要做的是准备数据。
我们要将数据输入网络,必须进行将列表向张量的转换。
下面这段代码是将数据向量化.

import numpy as np
def vectorize_sequences(sequences,dimension=10000):results = np.zeros((len(sequences),dimension))for i,sequence in enumerate(sequences):results[i,sequence]=1.return  results
x_train=vectorize_sequences(train_data)
x_test=vectorize_sequences(test_data)
y_train=np.asarray(train_labels).astype('float32')
y_test =np.asarray(test_labels).astype('float32')

构建网络

我们可以发现输入数据是向量,而标签是标量。对于这种情况,我们可以选用带有relu激活的全连接层(Dense)的简单堆叠,比如Dense(16,activation=‘relu’)。所以我们选择的网络构架为:两个中间层,每层都有16个隐藏单元。第三层输出一个标量,预测当前评论的情感。中间层使用relu作为激活函数,最后一层使用sigmoid激活以输出一个0~1范围内的概率值(表示样本的目标值等于1的可能性,即评论为正面性)。relu函数将所有负值归零,而sigmoid函数则将任意值“压缩”到[0,1]区间内,其输出值可以看作概率值。下图为Relu函数图像:

该图为Sigmoid激活函数图像:

from keras import models
from keras import layersmodel = models.Sequential()
model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(16,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))

最后,我们选择损失函数和优化器。由于网络输出是一个概率值,那么我们选择二元交叉熵损失是一个比较好的选择,下面代码是配置损失函数和优化器:

model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])

训练和验证模型

下面给出代码:

from keras.datasets import  imdb
import numpy as np
from keras import models
from keras import layers
import matplotlib.pyplot as plt(train_data,train_labels),(test_data,test_labels) = imdb.load_data(num_words=10000)def vectorize_sequences(sequences,dimension=10000):results = np.zeros((len(sequences),dimension))for i,sequence in enumerate(sequences):results[i,sequence]=1.return  resultsx_train=vectorize_sequences(train_data)
x_test=vectorize_sequences(test_data)
y_train=np.asarray(train_labels).astype('float32')
y_test =np.asarray(test_labels).astype('float32')
print(x_train[0])
x_val=x_train[:10000]
partial_x_train=x_train[10000:]y_val = y_train[:10000]
partial_y_train=y_train[10000:]model = models.Sequential()
model.add(layers.Dense(16,activation='relu',input_shape=(10000,)))
model.add(layers.Dense(16,activation='relu'))
model.add(layers.Dense(1,activation='sigmoid'))model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])history=model.fit(partial_x_train,partial_y_train,epochs=20,batch_size=512,validation_data=(x_val,y_val))history_dict=history.history
loss_values=history_dict['loss']
val_loss_values=history_dict['val_loss']epochs=range(1,len((loss_values)+1))plt.plot(epochs,loss_values,'bo',label='Training loss')
plt.plot(epochs,val_loss_values,'b',label='Validation loss')
plt.title('Training and validation loss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()plt.show()

Python深度学习笔记(三)二分类模型相关推荐

  1. Kera之父Python深度学习笔记(二)神经网络的数学基础

    目录 神经网络的数据表示 标量(0D张量) 向量(1D张量) 矩阵(2D张量) 3D张量以及更高维张量 关键属性 在Numpy中操作张量 数据批量的概念 现实世界中的数据张量 向量数据 时间序列数据和 ...

  2. Python数据挖掘学习笔记】九.回归模型LinearRegression简单分析氧化物数据

    #2018-03-23 16:26:20 March Friday the 12 week, the 082 day SZ SSMR [Python数据挖掘学习笔记]九.回归模型LinearRegre ...

  3. 神经网络与深度学习笔记汇总二

    神经网络与深度学习笔记汇总二 正交化(方便调整参数) 迭代 单实数评估指标(判断几种手段/方法哪个更好) 指标选取 训练集.开发集.测试集作用与用途 评估指标 判断算法是好是坏 迁移学习 总结 往期回 ...

  4. python做直方图-python OpenCV学习笔记实现二维直方图

    本文介绍了python OpenCV学习笔记实现二维直方图,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/dd/d0d/tutorial_py_2d ...

  5. 深度学习笔记(二)图像分类实践

    深度学习笔记(二)图像分类实践 使用keras中的ResNet模型进行图像处理记忆预测 import keras #import tensorflow from keras.applications. ...

  6. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  7. 使用Excel分析数据学习笔记之 二分类与混淆矩阵

    使用Excel分析数据学习笔记之 二分类与混淆矩阵 混淆矩阵的构成: e.g.1:Bombers and seagulls 案例背景 混淆矩阵 如何根据混淆矩阵得到ROC曲线? 如何设定最佳阈值(op ...

  8. [学习笔记] python深度学习---第三章 神经网络入门

    一.神经网络剖析 1. 训练神经网络主要围绕以下四个方面: (1) 层,多个层组合成网络(或模型). (2)输入数据和相应的目标. (3)损失函数,即用于学习的反馈信号. (4)优化器,决定学习过程如 ...

  9. 网易云课堂吴恩达Andrew Ng深度学习笔记(二)

    01.神经网络和深度学习 第二周  神经网络基础 先说明最简单的二分类,即可以把结果分为0和1两类,或者说是否两种的分类情况. 比如说判定图片中是否有猫,标记为有(1)或者无(0). 特征则是图片中像 ...

  10. 吴恩达深度学习笔记六:序列模型

    周末出去耍了一下,回来又玩了两天游戏,耽误了好多时间啊,关键是连输20多局.哎,以后还是少玩游戏,多去做些有趣的事情吧,免得费时费力还不开心. 1. 循环神经网络(RNN:Recurrent Neur ...

最新文章

  1. android怎么监听多点触摸_大尺寸触摸屏厂家定制多点触摸框
  2. Java集合框架(1)
  3. JS和安卓 IOS的交互 例子式记录
  4. angular html页面嵌套,使用AngularJS来实现HTML页面嵌套的方法
  5. 利用Git查看项目代码总行数
  6. ggplot2 | ggplot2作图语法入门
  7. 数据结构-栈(先进后出表)
  8. 现代软件工程第五周作业
  9. python计算机视觉编程——sift特征提取和ransac减少错配
  10. 易班登陆接口接入实例
  11. 进度模型方法论,利用“削峰填谷”进行资源优化
  12. angularjs 猜大小
  13. 读书笔记-数据库系统概念-chapter3SQL
  14. graphpad画生存曲线怎么样去掉删失点_Graphpad Prism 绘制散点图
  15. (转)连续信号(八)| 傅里叶变换的性质 | 积分、微分特性 + 时域、频域卷积 + 帕斯瓦尔
  16. 数据结构(12)----图(遍历、最小生成树、easyX可视化)
  17. LeetCode: 871. Minimum Number of Refueling Stops
  18. 北漂那么多程序员,到了35岁以后该怎么选择往后的路?
  19. Python 进程和设计模式
  20. seo关键词词库表格的建立和关键词分组

热门文章

  1. 手撸一个外卖点餐系统后台,可以写上简历的实战项目!
  2. Invisible character on env file, cause programe abort abnormally
  3. PaddlePaddle入门实践——手写数字识别
  4. 软件测试打电话,如何有效测试手机通话测试 - fox的测试人生 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  5. 2020-08-05流量计怎么选你学会了么?
  6. linux源码分析工具
  7. 鹰信车载桌面,通过车机可以拨号,统一管理车载电话应用
  8. Linux (Ubuntu): bash: tailf: command not found
  9. sipp使用过程中报错
  10. oracle临时表空间最大多大,Oracle临时表空间过大解决方法