博客
关于我
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/

你可能感兴趣的文章
python协程实时输出_Python 协程以及事件循环的问题,怎么知道 IO 读取结束了呢?...
查看>>
Python十进制&;包提供错误的结果
查看>>
Python化身“安全老中医”:一键搞定工控系统漏洞,从零基础到精通,收藏这篇就够了!
查看>>
Python加速运行技巧
查看>>
python办公自动化基础遍历文件夹
查看>>
python办公自动化基础输出文件和文件夹
查看>>
python办公自动化基础搜索文件
查看>>
python知识:@classmethod和@staticmethod的异同
查看>>
python前端之css
查看>>
Python制作进度条,原来有这么多方法
查看>>
Python制作简单的学生成绩管理系统
查看>>
python制作甘特图的基本知识(附Demo)
查看>>
python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
查看>>
Python到底能做什么?它的优点在哪?
查看>>
python利用pytorch库导出图像分割算子
查看>>
python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
查看>>
python利用excel分析过杀漏失
查看>>
python判断汉字数目
查看>>
python判断文件是空的,如果是空的,就删除
查看>>
python判断密码是否正确_python密码判断是否符合要求的方法
查看>>