Keras-1 学习Keras,从Hello World开始
来源:互联网 发布:java医疗项目需求文档 编辑:程序博客网 时间:2024/05/16 02:08
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 install keras- 安装TensorFlow
pip install tensorflow- 安装一些必要的库(缺啥装啥)
conda install jupyter notebook numpy matplotlibAnaconda的下载速度可以通过设置国内镜像来提到,具体请看Windows下有什么办法提高conda install的速度?
让我们开始吧
首先,我们先导入模块,一些常见的模块如numpy, matplotlib就不解释了。
- seaborn 一个matplotlib的高级封装,让画图更简单漂亮,但是在这个例子中,我们主要用它来导入数据
- Sequential 叫做“序贯模型”,是Keras模型之一。详见关于Keras模型
- keras.layers.core 常用层模块,包括全连接层(Dense),激活层等。详见常用层
- keras.utils utils工具模块,提供了一系列有用的工具。详见utils工具
%matplotlib inlineimport matplotlib.pyplot as pltimport seaborn as snsimport numpy as npfrom sklearn.model_selection import train_test_splitimport pandas as pdfrom keras.models import Sequentialfrom keras.layers.core import Dense, Activationfrom 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()
sns.pairplot(iris, hue='species')
<seaborn.axisgrid.PairGrid at 0x1bdee328710>
训练集和测试集
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 layermodel.add(Dense(16, input_shape=(4,)))model.add(Activation('sigmoid'))# output layermodel.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)
<keras.callbacks.History at 0x195e2abcf98>
Test 测试
loss, accuracy = model.evaluate(test_X, test_y_ohe, verbose=0)print('Accuracy = {:.2f}'.format(accuracy))
Accuracy = 1.00
总结
对于一个深度学习的任务,大致可以分为以下三个部分
1. 数据的准备。包括数据的获取,数据清洗,数据预处理等等
2. 模型的构建。采用何种模型,网络结构是怎样的等都要考虑
3. 参数的调整。通过反复训练来进行参数的调整,通常这也是最花时间的
阅读全文
0 0
- Keras-1 学习Keras,从Hello World开始
- keras Hello world
- 开始学习keras
- Keras学习一快速开始
- 【Keras】Keras学习框架
- Keras学习日记1
- Keras学习笔记(1)
- 从Hello World开始
- 从hello world开始
- 从hello world 开始
- 从hello world开始
- Keras学习
- Google Gadgets (1):从 Hello World 开始
- keras
- keras
- keras
- Keras
- keras
- unity判断其它物体相对于自身方位以及角度
- 《计算机网络》谢希仁版学习笔记3-数据链路层(上)
- Java中的继承和多态
- 分享一下鹅厂团队的Code Review经验
- VS C#中#region的作用!!
- Keras-1 学习Keras,从Hello World开始
- 摩尔定律还有效吗
- 存储器(三)
- PHP 错误与异常的日志记录
- 安卓 分类 页面
- [svc]powerdns+mysql,实现私有作用域转发
- 关于java常用的内存理解
- hdu2874_Connections between cities(tarjan/lca/边表)
- 身为程序员的你是不是经常说这几句话呢?