40题刷爆Keras,人生苦短我选Keras
零、导入
1.导入 Keras 库,并打印版本信息
import keras
print(keras.__version__)
一、一个简单的例子
使用MLP模型实现手写数字图像MNIST的分类
1.1 选择模型
2.初始化一个顺序模型(Sequential)
model = Sequential()
1.2 构建网络
3.为model
加入一个784输入,784个输出的隐藏层,激活函数使用relu
model.add(Dense(units=784, activation='relu', input_dim=784))
4.在之前的基础上为model
加入10个输出的输出层,激活函数使用softmax
model.add(Dense(units=10, activation='softmax'))
5.通过.summary()
查看模型参数情况
model.summary()
1.3 编译模型
6.使用.compile()
来配置学习过程,代价函数loss
使用categorical_crossentropy
,优化算法optimizer
使用sgd
,性能的指标使用accuracy
model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])
1.4 训练
读入数据(略)
7.将y
值进行one-hot编码
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
8.将数据送入模型训练
model.fit(x_train, y_train, epochs=5, batch_size=32)
9.评估模型性能
score = model.evaluate(x_test, y_test, batch_size=128)
print("loss:",score[0])
print("accu:",score[1])
1.5 预测
10.使用模型进行预测
model.predict_classes(x_test, batch_size=128)
二、稍微复杂的顺序模型
使用LeNet5实现CIFAR10数据集的分类
2.1 选择模型
11.新建一个顺序模型
model = Sequential()
2.2 构建网络
12.完成INPUT-C1:添加一个二维卷积层,输入为32x32x3,卷积核大小为5x5,核种类6个,并且假设我们不小心漏了relu
model.add(Conv2D(6, (5, 5), input_shape=(32, 32,3)))
13.刚刚不小心漏了relu
,现在可以另外加上
model.add(Activation('relu'))
14.完成C1-S2:2x2下采样层
model.add(MaxPooling2D(pool_size=(2, 2)))
15.完成S2-C3:二维卷积,16个内核,5x5的大小,别忘记relu
model.add(Conv2D(16, (5, 5), activation='relu'))
16.完成C3-S4:2x2下采样层
model.add(MaxPooling2D(pool_size=(2, 2)))
17.完成S4-C5:先添加平坦层
model.add(Flatten())
18.再添加全连接层,输出120维,激活函数relu
model.add(Dense(120, activation='relu'))
19.完成C5-F6:添加全连接层,84个输出,激活函数relu
model.add(Dense(84, activation='relu'))
20.完成F6-OUTPUT:添加全连接层,10个输出,激活函数softmax
model.add(Dense(10, activation='softmax'))
2.3 编译
21.设置随机梯度下降SGD
优化算法的参数,learning_rate=0.01
,epoch=25
,decay=learning_rate/epoch
,momentum=0.9
,nesterov=False
from keras.optimizers import SGDlrate = 0.01
epoch = 10
decay = lrate/epoch
sgd = SGD(lr=lrate, momentum=0.9, decay=decay, nesterov=False)
23.编译模型,代价函数loss
使用categorical_crossentropy
,优化算法前面已经定义了,性能的指标使用accuracy
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
2.4 训练
读入数据 & 预处理(略)
24.将数据送入模型,并且设置20%为验证集
history=model.fit(x=train_X, y=train_Y,validation_split=0.2, epochs=10, batch_size=32, verbose=1)
25.可视化历史训练的 训练集 及 验证集 的准确率值 可视化历史训练的 训练集 及 验证集 的损失值
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model accuracy')
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'val'], loc='upper left')
plt.show()
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model loss')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'val'], loc='upper left')
plt.show()
26.模型评估
scores = model.evaluate(test_X, test_Y, verbose=0)
print(model.metrics_names)
print(scores)
2.5 预测
27.预测结果
prediction=model.predict_classes(test_X)
prediction[:10]
可视化预测结果
显示混淆矩阵
import pandas as pd
print(classes)
pd.crosstab(y_gt.reshape(-1),prediction,rownames=['label'],colnames=['predict'])
三、Model式模型
这部分会实现一个多输入多输出的模型
3.1 构建网络
这里我们选择函数式模型(model),所以不需要提前实例化,先将网络结构实现
28.定义①,主要输入层,接收新闻标题本身,即一个整数序列(每个整数编码一个词)。这些整数在 1 到 10,000 之间(10,000 个词的词汇表),且序列长度为 100 个词。命名main_input
main_input = Input(shape=(100,), dtype='int32', name='main_input')
29.定义②,将输入序列编码为一个稠密向量的序列,输出每个向量维度为 512。
x = Embedding(output_dim=512, input_dim=10000, input_length=100)(main_input)
30.定义③,LSTM 层把向量序列转换成单个向量,它包含整个序列的上下文信息,输出维度32
lstm_out = LSTM(32)(x)
31.定义⑩,其作为辅助损失,使得即使在模型主损失很高的情况下,LSTM 层和 Embedding 层都能被平稳地训练。输出维度1,激活函数sigmoid
,命名aux_output
auxiliary_output = Dense(1, activation='sigmoid', name='aux_output')(lstm_out)
32.定义⑨,输入辅助数据,5维向量,命名aux_input
auxiliary_input = Input(shape=(5,), name='aux_input')
33.定义④,将辅助输入数据与 LSTM 层的输出连接起来,输入到模型中
x = keras.layers.concatenate([lstm_out, auxiliary_input])
34.定义⑤⑥⑦,堆叠多个全连接网络层,输出均为64维
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
x = Dense(64, activation='relu')(x)
35.定义⑧,输出层,激活函数sigmoid
,命名main_output
main_output = Dense(1, activation='sigmoid', name='main_output')(x)
3.2 定义模型
36.定义一个具有两个输入和两个输出的模型
model = Model(inputs=[main_input, auxiliary_input], outputs=[main_output, auxiliary_output])
3.3 编译
37.编译模型,给辅助损失分配0.2的权重
model.compile(optimizer='rmsprop',loss={'main_output': 'binary_crossentropy', 'aux_output': 'binary_crossentropy'},loss_weights={'main_output': 1., 'aux_output': 0.2})
3.4 训练
读取数据(略)
38.把数据送入模型训练
model.fit({'main_input': headline_data, 'aux_input': additional_data},{'main_output': headline_labels, 'aux_output': additional_labels},epochs=50, batch_size=32,verbose=0)
3.5 预测
model.predict({'main_input': headline_data, 'aux_input': additional_data})
四、模型的保存与读取
39.保存模型及其权重
# 保存模型
model_json = model.to_json()
json_file = open("model.json", "w")
json_file.write(model_json)
json_file.close()
# 保存权重
model.save_weights("model.h5")
40.读取模型及其权重
from keras.models import model_from_json
# 读取模型
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# 读取权重
loaded_model.load_weights("model.h5")
# 使用之前记得要编译一下
model.compile(optimizer='rmsprop',loss={'main_output': 'binary_crossentropy', 'aux_output': 'binary_crossentropy'},loss_weights={'main_output': 1., 'aux_output': 0.2})
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(pdf更新到25集)本站qq群1003271085,加入微信群请回复“加群”获取一折本站知识星球优惠券,请回复“知识星球”喜欢文章,点个在看
40题刷爆Keras,人生苦短我选Keras相关推荐
- [剑指offer][JAVA][面试第40题][最小的k个数][快选][堆][BST]
[问题描述]面试第40题 最小的k个数 输入整数数组 arr ,找出其中最小的 k 个数.例如,输入4.5.1.6.2.7.3.8这8个数字,则最小的4个数字是1.2.3.4. 示例 : 输入:arr ...
- 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...
- ACM金牌导师1个月带你一起魔鬼刷爆算法题!
金牌导师 带你刷爆算法 算法知识 一个月讲解+训练 今天限时特价参加 在讲到 AI 算法工程师时,大部分同学关注点都在高大上的模型,一线优秀的项目.但大家往往忽略了一点,人工智能的模型.项目最终还是要 ...
- 为进大厂刷爆算法题,最后却倒在了基础题上?太苦了!
金牌导师 带你刷爆算法 算法知识 一个月讲解+训练 今天限时特价参加 在讲到 AI 算法工程师时,大部分同学关注点都在高大上的模型,一线优秀的项目.但大家往往忽略了一点,人工智能的模型.项目最终还是要 ...
- 一周刷爆LeetCode笔记
一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...
- 《啥是佩奇》导演揭秘:铁打小猪如何刷爆朋友圈?
中新网客户端北京1月18日电 题:<啥是佩奇>导演揭秘幕后:"铁打小猪"如何刷爆朋友圈? 记者 任思雨 <啥是佩奇>片头.影片截图 "你告诉爷爷你 ...
- python广告搞笑_技术入门 | 听说Python的广告刷爆了你的朋友圈?
前几天,一条 Python 广告刷爆了小编的朋友圈.网友纷纷惊呼,"什么鬼?居然这么多人在学 Python?"而在日前 IEEE Spectrum 发布的第五届年度编程语言交互排行 ...
- 这份程序员的简历刷爆了九月的朋友圈
今年五一期间,一份简历刷爆了很多人的朋友圈.我们有幸联系到了这份简历的主人公,邀请他来将自己在编程领域从事了20年的工作心得分享给大家,希望你看完后能有所收获. 我是一个从事编程工作20年的程序员.从 ...
- python搞笑梗_豆瓣9.1、刷爆朋友圈,知道这3个梗就够了
原标题:豆瓣9.1.刷爆朋友圈,知道这3个梗就够了 作者 ✎ 西帕克 影评人,电影网站主编 1977年,乔治·卢卡斯的<星球大战>上映,引发了全球观影风潮,影评人罗杰·伊伯特(Roger ...
最新文章
- 一个精简的开源点云库
- DHCP在企业网中的应用
- mac 安装cmake
- 解决编译apache出现的问题:configure: error: APR not found . Please read the documentation
- 在批处理脚本所在目录下打开cmd
- axios在IE下的兼容性处理
- VS Code集成SandDance可视化分析数据
- 11、mysql数据表中数据的查询(3)
- python3如何安装selenium_Mac-Firefox浏览器+selenium+Python3环境安装
- l开头的英文车标是什么车_行业冷知识 | 为什么汽车品牌都喜欢用动物做车标?...
- nth-of-type和nth-child
- 深度学习图像分类(十三):ShuffleNet系列(V1,V2)
- 遥感资源大放送(下)| 11 个经典遥感数据集
- 感恩,生命的馈赠(2014年终总结)
- 数学建模中数据处理类型题目的主要处理流程与方法
- 英飞凌AURIX HSM介绍
- 吐槽各大竞赛题库的优劣
- 更换ip软件安卓_掘金网告诉你稳定IP的神操作!
- 如何恢复未保存的Excel文件
- 中压开关柜中的弧光保护
热门文章
- css中小知识点总结
- LaText中插入带上下限的求和符号
- C#中的文本乱码问题
- BZOJ3738 : [Ontak2013]Kapitał
- crawler_爬虫开发的曲线图
- sqlserver 实现数据库全文检索
- 关于团队发展的若干想法(欢迎讨论)
- java获取gbk文件名 linux_Java读取linux系统中文文件名时候乱码,并显示文件不存在...
- 斯坦福大学 计算机视觉方面课程资料
- 数据结构火车订票系统C语言课程设计,求助一个数据结构C语言课程设计源代码订票系统^:^!...