机器学习:Keras 简例
安装
pip install keras
Keras 有两个 Backend,也就是 Keras 基于什么东西来做运算
Keras 的两个 Backend,一个是 Theano,一个是 TensorFlow
每次当我们 import keras 的时候, 就会看到屏幕显示当前使用的 Backend
>>> import keras
Using TensorFlow backend.
配置文件
lin@Master:~$ cat ~/.keras/keras.json
{
"epsilon": 1e-07,
"floatx": "float32",
"image_data_format": "channels_last",
"backend": "tensorflow"
}
直接修改配置文件可能会在 import 时出现错误信息
解决方案
1. 在其他文本编辑器内编辑好这段文本, 然后整体拷贝到这个文件里
2. 在 Terminal 中直接输入临时环境变量执行: KERAS_BACKEND=tensorflow python -c "from keras import backend"
3. 在 python 代码中 import keras 前加入一个环境变量修改的语句: os.environ['KERAS_BACKEND']='theano'
为什么用 Keras
TensorFlow 提供很多基础的操作, 要写完一个模型比如神经网络还需要很多代码
Keras 之类的第三方软件对 TensorFlow, Theano 等作了封装
适合于
简易和快速的原型设计
支持 CNN 和 RNN, 或二者的结合
无缝 CPU 和 GPU 切换
Keras 适用的 Python 版本是:Python 2.7-3.6
Keras 的设计原则是
用户友好:提供一致而简洁的 API
模块性:网络层、损失函数、优化器、初始化策略、激活函数、正则化方法都是独立的模块
易扩展性:添加新模块超级容易,只需要仿照现有的模块编写新的类或函数即可
与 Python 协作:Keras 没有单独的模型配置文件类型 (作为对比, caffe 有)
模型由 python 代码描述, 使其更紧凑和更易 debug, 并提供了扩展的便利性
神经网络例子
from sklearn import datasets
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.utils import to_categorical
## 创建一个空的顺序序列的网络结构
model = Sequential()
## 添加 Dense (既全连接层)
## units 是该层的神经元个数既输出数据维度
## activation 是激活函数(没指定就用 f(x)=x )
## use_bias 是否使用偏移
## input_dim 输入数据维度
model.add(Dense(units=64, activation='relu', input_dim=4))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(units=3, activation='softmax'))
## 也可以分两步实现, 把 Activation 作为单独一层
## model.add(Dense(units=64, input_dim=100))
## model.add(Activation("relu"))
## 编译模型, 指定损失函数, 优化器, 也可以使用自己自定义的函数
model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])
## 读取样本数据
data = datasets.load_iris()
X, Y = data.data[:-1], data.target[:-1]
## 转为二进制
Y = to_categorical(Y)
## 训练
model.fit(X, Y, epochs=100, batch_size=32)
## 评估
loss_and_metrics = model.evaluate(X, Y, batch_size=128)
## 预测
classes = model.predict(X, batch_size=128)
卷积神经网络
from keras.layers import Conv2D, MaxPool2D, Dense, Flatten
from keras.models import Sequential
from keras.utils import to_categorical
from sklearn import datasets
lenet = Sequential()
## 添加卷积层, filters 核数, kernel_size 核大小, strides 步长, padding 填充方式, input_shape 输入数据维度
lenet.add(Conv2D(filters=6, kernel_size=3, strides=1, padding='same', input_shape=(8, 8, 1)))
## 添加池化层, pool_size 大小, strides 步长
lenet.add(MaxPool2D(pool_size=2, strides=2))
## 继续添加卷积层
lenet.add(Conv2D(filters=16, kernel_size=3, strides=1, padding='valid'))
## 继续添加池化层
lenet.add(MaxPool2D(pool_size=2, strides=2))
## 扁平化, 将多维数据转化为一维数据
lenet.add(Flatten())
## 添加全连接层
lenet.add(Dense(120))
lenet.add(Dense(84))
lenet.add(Dense(10, activation='softmax'))
## 编译
lenet.compile('sgd', loss='mean_squared_error', metrics=['accuracy'])
## 读取样本数据
digits = datasets.load_digits()
X, Y = digits.data[:-1], digits.target[:-1]
X = X.reshape(-1,8,8,1) ## 将 X 从 (1796, 64) 变为 (1796, 8, 8, 1)
Y = to_categorical(Y) ## 将 Y 二进制化 (one-hot)
## 训练
lenet.fit(X, Y, batch_size=64, epochs=50, validation_data=[X, Y])
## 预测
lenet.predict(X)
可视化
sudo apt-get install graphviz
sudo pip install graphviz
sudo pip install pydot_ng
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM
from keras.utils import plot_model
model = Sequential()
model.add(Embedding(input_dim=1024, output_dim=256, input_length=50))
model.add(LSTM(128))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
plot_model(model, to_file='model.png')
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界