热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Keras1学习Keras,从HelloWorld开始

KerasHelloWorld最近开始学习Keras,个人觉得最有效的学习方法就是写很多很多代码,熟能成巧。我们先从最简单的例子来学习Keras&#x

Keras Hello World

最近开始学习Keras,个人觉得最有效的学习方法就是写很多很多代码,熟能成巧。我们先从最简单的例子来学习Keras,Keras版的Hello World。
在这个例子中,我们的任务是进行花朵的分类。


  • 本文的代码来自 这里,作者将Keras与sklearn进行了比较,有详细代码的解释。本文只做Keras部分的内容,删去了原本sklearn的内容
  • 本文为个人的代码记录,只为记录在写代码时的困惑,并假设读者有一些深度学习的基本概念。
  • 完整代码在 https://github.com/jiemojiemo/Keras-Demo/tree/master/Keras_Hello_World

Keras的安装

在Keras官网中已经给出了详细的安装指南


  • Linux 安装指南
  • Windows 安装指南
  • 但是个人还是推荐使用Anaconda进行安装,在Anaconda安装好的情况下使用以下命令进行安装Keras
    • 创建名为keras的环境

    conda create -n keras python=3

    • 进入环境

    activate keras

    • 安装keras

    conda update conda
    conda update --all
    conda install mingw libpython
    conda install keras

    • 安装TensorFlow

    pip install tensorflow

    • 安装一些必要的库(缺啥装啥)

    conda install jupyter notebook numpy matplotlib

  • Anaconda的下载速度可以通过设置国内镜像来提到,具体请看Windows下有什么办法提高conda install的速度?

让我们开始吧

首先,我们先导入模块,一些常见的模块如numpy, matplotlib就不解释了。


  • seaborn 一个matplotlib的高级封装,让画图更简单漂亮,但是在这个例子中,我们主要用它来导入数据
  • Sequential 叫做“序贯模型”,是Keras模型之一。详见关于Keras模型
  • keras.layers.core 常用层模块,包括全连接层(Dense),激活层等。详见常用层
  • keras.utils utils工具模块,提供了一系列有用的工具。详见utils工具

%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as npfrom sklearn.model_selection import train_test_splitimport pandas as pdfrom keras.models import Sequential
from keras.layers.core import Dense, Activation
from keras.utils import np_utils

导入数据


  • sns.load_dataset('iris')导入iris数据库,iris包含了150条花的记录,前四个length和width是花的属性,species是花的种共有三种花,分别是setosa,versicolor和virginica。
  • iris.head()查看数据。
  • sns.pairplot(iris, hue='species')用于显示数据(这不是我们要关注的内容)

iris = sns.load_dataset('iris')
iris.head()

sepal_lengthsepal_widthpetal_lengthpetal_widthspecies
05.13.51.40.2setosa
14.93.01.40.2setosa
24.73.21.30.2setosa
34.63.11.50.2setosa
45.03.61.40.2setosa

sns.pairplot(iris, hue='species')


这里写图片描述


训练集和测试集


  • train_test_split将数据集分割为训练集和测试集,train_size为训练集占整个数据集的大小,random_state为随机种子(详见这里)

X = iris.values[:, :4]
y = iris.values[:, 4]

train_X, test_X, train_y, test_y = train_test_split(X, y, train_size=0.8, random_state=0)

One-Hot-Encoding


  • 深度网络只能接受数字作为输入,iris数据集中species是字符串类型的,因此我们需要将其数字化。
  • One-hot encoding 就是这样一种数字化的编码方法,相关概念详见数据处理——One-Hot Encoding
  • 下面给出两种不同的one-hot encoding的实现方式,它们并没有差别

def one_hot_encode_object_array(arr):uniques, ids = np.unique(arr, return_inverse=True)return np_utils.to_categorical(ids, len(uniques))

# if you are a pandas man ...
def one_hot_encode_object_array_pandas(arr):return pd.get_dummies(arr).values

train_y_ohe = one_hot_encode_object_array_pandas(train_y)
test_y_ohe = one_hot_encode_object_array_pandas(test_y)

搭起我们的网络结构


  • 我们要搭的网络很简单,只有两层,可以表示为 4-16-3,隐层激活函数是sigmoid,输出层时softmax
  • Sequential是多个网络层的线性堆叠,也就是“一条路走到黑”
  • Dense就是全连接层了,注意的是,第一层网络需要指明输入数据的大小,后面层就不需要了,keras会自动推导
  • Activation是激活层,常见的激活函数有sigmoid, softmax, ReLU等等

model = Sequential()
# hidden layer
model.add(Dense(16, input_shape=(4,)))
model.add(Activation('sigmoid'))
# output layer
model.add(Dense(3))
model.add(Activation('softmax'))

Compile 编译


  • 对学习过程进行配置。详见编译

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=["accuracy"])

Training 训练


  • verbose 是否打印训练log
  • validation_split 验证集的大小,关于验证集,简单的说就是用于调整模型参数(模型结构,学习速率,batch_size等等)。人们通过观察训练时的模型在验证集上的表现,来对自己模型作出调整

model.fit(train_X, train_y_ohe, epochs=100, batch_size=1, verbose=0, validation_split=0.2)



Test 测试

loss, accuracy = model.evaluate(test_X, test_y_ohe, verbose=0)
print('Accuracy = {:.2f}'.format(accuracy))

Accuracy = 1.00

总结

对于一个深度学习的任务,大致可以分为以下三个部分


  1. 数据的准备。包括数据的获取,数据清洗,数据预处理等等
  2. 模型的构建。采用何种模型,网络结构是怎样的等都要考虑
  3. 参数的调整。通过反复训练来进行参数的调整,通常这也是最花时间的

推荐阅读
  • EzPP 0.2发布,新增YAML布局渲染功能
    EzPP发布了0.2.1版本,新增了YAML布局渲染功能,可以将YAML文件渲染为图片,并且可以复用YAML作为模版,通过传递不同参数生成不同的图片。这个功能可以用于绘制Logo、封面或其他图片,让用户不需要安装或卸载Photoshop。文章还提供了一个入门例子,介绍了使用ezpp的基本渲染方法,以及如何使用canvas、text类元素、自定义字体等。 ... [详细]
  • 开源Keras Faster RCNN模型介绍及代码结构解析
    本文介绍了开源Keras Faster RCNN模型的环境需求和代码结构,包括FasterRCNN源码解析、RPN与classifier定义、data_generators.py文件的功能以及损失计算。同时提供了该模型的开源地址和安装所需的库。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • Python操作MySQL(pymysql模块)详解及示例代码
    本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 如何使用Python从工程图图像中提取底部的方法?
    本文介绍了使用Python从工程图图像中提取底部的方法。首先将输入图片转换为灰度图像,并进行高斯模糊和阈值处理。然后通过填充潜在的轮廓以及使用轮廓逼近和矩形核进行过滤,去除非矩形轮廓。最后通过查找轮廓并使用轮廓近似、宽高比和轮廓区域进行过滤,隔离所需的底部轮廓,并使用Numpy切片提取底部模板部分。 ... [详细]
author-avatar
手机用户2502916567
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有