博客
关于我
Keras简单梳理
阅读量:360 次
发布时间:2019-03-04

本文共 4531 字,大约阅读时间需要 15 分钟。

Keras 实现基础

Keras 实现线性回归

Keras 的便捷性在于其代码简洁,以下是实现线性回归的示例:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 生成随机点
x_data = np.random.rand(100)
# 添加噪声
noise = np.random.normal(0, 0.01, x_data.shape)
y_data = x_data * 0.1 + 0.2 + noise
# 定义模型
model = Sequential()
model.add(Dense(units=1, input_dim=1))
# 编译模型
model.compile(optimizer='sgd', loss='mse')
# 训练过程
for step in range(3000):
cost = model.train_on_batch(x_data, y_data)
if step % 300 == 0:
print(f'step: {step}; cost: {cost}')
# 预测结果
y_pred = model.predict(x_data)

Keras 实现非线性回归

通过添加激活函数,可以实现非线性回归:

import numpy as np
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.optimizers import SGD
# 随机生成200个点
x_data = np.linspace(-0.5, 0.5, 200)
# 添加噪声
noise = np.random.normal(0, 0.02, x_data.shape)
y_data = np.square(x_data) + noise
# 定义模型
model = Sequential()
model.add(Dense(units=10, input_dim=1))
model.add(Activation('tanh'))
model.add(Dense(units=1, activation='tanh'))
# 编译模型
model.compile(optimizer=SGD(lr=0.1), loss='mse')
# 训练过程
for step in range(6000):
cost = model.train_on_batch(x_data, y_data)
if step % 300 == 0:
print(f'step: {step}; cost: {cost}')

MNIST 手写数字识别

使用 Keras 实现 MNIST 的手写数字分类:

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.utils import np_utils
from keras.optimizers import SGD
from keras.regularizers import l2
# 加载数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
x_train = x_train.reshape(x_train.shape[0], -1) / 255
x_test = x_test.reshape(x_test.shape[0], -1) / 255
# 将标签转换为 one-hot 编码
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)
# 定义模型
model = Sequential([
Dense(units=200, input_dim=784, bias_initializer='one', activation='relu',
kernel_regularizer=l2(0.0003)),
Dropout(0.4),
Dense(units=100, bias_initializer='one', activation='relu'),
Dropout(0.4),
Dense(units=10, activation='softmax')
])
# 编译模型
adam = SGD(lr=0.2)
model.compile(optimizer=adam,
loss='categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size=32, epochs=10)

Keras 实现CNN

使用卷积层实现图像分类:

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Convolution2D, MaxPool2D, Flatten, Dropout
from keras.utils import np_utils
from keras.optimizers import Adam
# 加载数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
x_train = x_train.reshape(-1, 28, 28, 1) / 255
x_test = x_test.reshape(-1, 28, 28, 1) / 255
# 将标签转换为 one-hot 编码
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)
# 定义模型
model = Sequential([
Convolution2D(filters=32, kernel_size=5, strides=1, padding='same', activation='relu'),
MaxPool2D(pool_size=2, strides=2, padding='same'),
Convolution2D(filters=64, kernel_size=5, strides=1, padding='same', activation='relu'),
MaxPool2D(pool_size=2, strides=2, padding='same'),
Flatten(),
Dense(1024, activation='relu'),
Dropout(0.5),
Dense(10, activation='softmax')
])
# 编译模型
adam = Adam(lr=0.001)
model.compile(optimizer=adam,
loss='categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size=64, epochs=4)

Keras 实现LSTM

实现时间序列预测:

from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, LSTM
from keras.utils import np_utils
from keras.optimizers import Adam
# 加载数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# 数据预处理
time_steps = 28
input_size = 28
cell_size = 50
x_train = x_train / 255
x_test = x_test / 255
# 将标签转换为 one-hot 编码
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)
# 定义模型
model = Sequential([
LSTM(units=cell_size, input_shape=(time_steps, input_size)),
Dense(10, activation='softmax')
])
# 编译模型
adam = Adam(lr=0.001)
model.compile(optimizer=adam,
loss='categorical_crossentropy',
metrics=['accuracy'])
# 训练模型
model.fit(x_train, y_train, batch_size=64, epochs=10)

模型的保存与载入

保存模型

使用 h5py 库保存模型:

model.save('lstm_mnist.h5')

加载模型

在需要时加载模型:

from keras.models import load_model
model = load_model('lstm_mnist.h5')

以上代码示例展示了 Keras 在多种任务中的实际应用,涵盖了线性回归、非线性回归、图像分类以及时间序列预测等。通过这些示例,可以清晰地看到 Keras 在机器学习模型开发中的强大优势。

转载地址:http://tzee.baihongyu.com/

你可能感兴趣的文章
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>
Nmap扫描教程之Nmap基础知识
查看>>