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

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

Keras 实现基础

Keras 实现线性回归

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

import numpy as npfrom keras.models import Sequentialfrom 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 npfrom keras.models import Sequentialfrom keras.layers import Dense, Activationfrom 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 mnistfrom keras.models import Sequentialfrom keras.layers import Dense, Dropoutfrom keras.utils import np_utilsfrom keras.optimizers import SGDfrom 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) / 255x_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 mnistfrom keras.models import Sequentialfrom keras.layers import Dense, Convolution2D, MaxPool2D, Flatten, Dropoutfrom keras.utils import np_utilsfrom keras.optimizers import Adam# 加载数据集(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理x_train = x_train.reshape(-1, 28, 28, 1) / 255x_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 mnistfrom keras.models import Sequentialfrom keras.layers import Dense, LSTMfrom keras.utils import np_utilsfrom keras.optimizers import Adam# 加载数据集(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理time_steps = 28input_size = 28cell_size = 50x_train = x_train / 255x_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_modelmodel = load_model('lstm_mnist.h5')

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

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

你可能感兴趣的文章
NodeJS @kubernetes/client-node连接到kubernetes集群的方法
查看>>
NodeJS API简介
查看>>
nodejs Error: request entity too large解决方案
查看>>
Nodejs express 获取url参数,post参数的三种方式
查看>>
nodejs http小爬虫
查看>>
nodejs libararies
查看>>
vue3+element-plus 项目中 el-switch 刷新后自动触发change?坑就藏在这里!
查看>>
nodejs npm常用命令
查看>>
nodejs npm常用命令
查看>>
Nodejs process.nextTick() 使用详解
查看>>
NodeJS yarn 或 npm如何切换淘宝或国外镜像源
查看>>
nodejs 中间件理解
查看>>
nodejs 创建HTTP服务器详解
查看>>
nodejs 发起 GET 请求示例和 POST 请求示例
查看>>
NodeJS 导入导出模块的方法( 代码演示 )
查看>>
nodejs 开发websocket 笔记
查看>>
nodejs 的 Buffer 详解
查看>>
nodejs 的 path 模块详解
查看>>