文章目录:
一.为什么要使用Keras
二.安装Keras和兼容Backend
1.如何安装Keras
2.兼容Backend
三.白话神经网络
四.Keras搭建回归神经网络
五.总结
https://github.com/eastmountyxz/
AI-for-TensorFlow
https://github.com/eastmountyxz/
AI-for-Keras
学Python近八年,认识了很多大佬和朋友,感恩。作者的本意是帮助更多初学者入门,因此在github开源了所有代码,也在公众号同步更新。深知自己很菜,得拼命努力前行,编程也没有什么捷径,干就对了。希望未来能更透彻学习和撰写文章,也能在读博几年里学会真正的独立科研。同时非常感谢参考文献中的大佬们的文章和分享。
- https://blog.csdn.net/eastmount
首先分享Keras基础原理及语法
接着使用Keras搭建回归神经网络、分类神经网络、CNN、RNN、LSTM、Autoencoder等
最后结合Keras实现各种自然语言处理、图像分类、文本挖掘、语音识别、视频分析等案例
Numpy
Scipy
activate tensorflow
pip3 install keras
pip install keras
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 14 16:43:21 2020
@author: Eastmount CSDN
"""
import numpy as np
from keras.preprocessing.sequence import TimeseriesGenerator
# 时间序列
y = np.array(range(5))
tg = TimeseriesGenerator(y, y, length=3, sampling_rate=1)
for i in zip(*tg[0]):
print(*i)
第一种方法,找到“keras/keras.json”这个文件,然后打开它。所有的backend信息就存储在这里,每次导入Keras包就会检测这个“keras.json”文件的backend。接着我们尝试修改。
第二种方法是在命令行中输入下面这句命令,每次运行脚本时它会直接帮你修改成临时的TensorFlow。
import os
os.environ['KERAS_BACKEND']='tensorflow'
import keras
输入层:直接接收信息的神经层,比如接收一张猫的图片
输出层:信息在神经元中传递中转和分析权衡,形成输出结果,通过该层输出的结果可以看出计算机对事物的认知
隐藏层:在输入和输出层之间的众多神经元连接组成的各个层面,可以有多层,负责对传入信息的加工处理,经过多层加工才能衍生出对认知的理解
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
#---------------------------创建散点数据---------------------------
# 输入
X = np.linspace(-1, 1, 200)
# 随机化数据
np.random.shuffle(X)
# 输出
y = 0.5*X + 2 + np.random.normal(0, 0.05, (200,)) #噪声平均值0 方差0.05
# 绘制散点图
plt.scatter(X, y)
plt.show()
# 数据集划分(训练集-测试集)
X_train, y_train = X[:160], y[:160] # 前160个散点
X_test, y_test = X[160:], y[160:] # 后40个散点
创建Sequential模型。
添加神经网络层。在Keras中,增加层的操作非常简单,调用model.add(Dense(output_dim=1, input_dim=1))函数添加即可。注意,如果再添加一个神经层,默认上一层的输出为下一层的输入数据,此时不需要定义input_dim,比如model.add(Dense(output_dim=1, ))。
搭建模型并选择损失函数(loss function)和优化方法(optimizing method)。
#----------------------------添加神经层------------------------------
# 创建模型
model = Sequential()
# 增加全连接层 输出个数和输入个数(均为1个)
model.add(Dense(output_dim=1, input_dim=1))
# 搭建模型 选择损失函数(loss function)和优化方法(optimizing method)
# mse表示二次方误差 sgd表示乱序梯度下降优化器
model.compile(loss='mse', optimizer='sgd')
print("训练")
# 学习300次
for step in range(301):
# 分批训练数据 返回值为误差
cost = model.train_on_batch(X_train, y_train)
# 每隔100步输出误差
if step % 100 == 0:
print('train cost:', cost)
print("测试")
# 运行模型测试 一次传入40个测试散点
cost = model.evaluate(X_test, y_test, batch_size=40)
# 输出误差
print("test cost:", cost)
# 获取权重和误差 layers[0]表示第一个神经层(即Dense)
W, b = model.layers[0].get_weights()
# 输出权重和偏置
print("weights:", W)
print("biases:", b)
y_pred = model.predict(X_test)
plt.scatter(X_test, y_test)
plt.plot(X_test, y_pred)
plt.show()
训练
train cost: 4.002261
train cost: 0.07719966
train cost: 0.005076804
train cost: 0.0030148015
测试
40/40 [==============================] - 0s 1ms/step
test cost: 0.0028453178238123655
weights: [[0.47052705]]
biases: [1.9944116]
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 14 16:43:21 2020
@author: Eastmount CSDN YXZ
O(∩_∩)O Wuhan Fighting!!!
"""
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
#---------------------------创建散点数据---------------------------
# 输入
X = np.linspace(-1, 1, 200)
# 随机化数据
np.random.shuffle(X)
# 输出
y = 0.5*X + 2 + np.random.normal(0, 0.05, (200,)) #噪声平均值0 方差0.05
# 绘制散点图
# plt.scatter(X, y)
# plt.show()
# 数据集划分(训练集-测试集)
X_train, y_train = X[:160], y[:160] # 前160个散点
X_test, y_test = X[160:], y[160:] # 后40个散点
#----------------------------添加神经层------------------------------
# 创建模型
model = Sequential()
# 增加全连接层 输出个数和输入个数(均为1个)
model.add(Dense(output_dim=1, input_dim=1))
# 搭建模型 选择损失函数(loss function)和优化方法(optimizing method)
# mse表示二次方误差 sgd表示乱序梯度下降优化器
model.compile(loss='mse', optimizer='sgd')
#--------------------------------Traning----------------------------
print("训练")
# 学习300次
for step in range(301):
# 分批训练数据 返回值为误差
cost = model.train_on_batch(X_train, y_train)
# 每隔100步输出误差
if step % 100 == 0:
print('train cost:', cost)
#--------------------------------Test-------------------------------
print("测试")
# 运行模型测试 一次传入40个测试散点
cost = model.evaluate(X_test, y_test, batch_size=40)
# 输出误差
print("test cost:", cost)
# 获取权重和误差 layers[0]表示第一个神经层(即Dense)
W, b = model.layers[0].get_weights()
# 输出权重和偏置
print("weights:", W)
print("biases:", b)
#------------------------------绘制预测图形-----------------------------
y_pred = model.predict(X_test)
plt.scatter(X_test, y_test)
plt.plot(X_test, y_pred, "red")
plt.show()
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 14 16:43:21 2020
@author: Eastmount CSDN YXZ
O(∩_∩)O Wuhan Fighting!!!
"""
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
import matplotlib.pyplot as plt
#---------------------------创建散点数据---------------------------
# 输入
X = np.linspace(-1, 1, 200)
# 随机化数据
np.random.shuffle(X)
# 输出
y = 0.5*X + 2 + np.random.normal(0, 0.05, (200,)) #噪声平均值0 方差0.05
# 绘制散点图
# plt.scatter(X, y)
# plt.show()
# 数据集划分(训练集-测试集)
X_train, y_train = X[:160], y[:160] # 前160个散点
X_test, y_test = X[160:], y[160:] # 后40个散点
#----------------------------添加神经层------------------------------
# 创建模型
model = Sequential()
# 增加全连接层 输出个数和输入个数(均为1个)
model.add(Dense(output_dim=1, input_dim=1))
# 搭建模型 选择损失函数(loss function)和优化方法(optimizing method)
# mse表示二次方误差 sgd表示乱序梯度下降优化器
model.compile(loss='mse', optimizer='sgd')
#--------------------------------Traning----------------------------
print("训练")
k = 0
# 学习1000次
for step in range(1000):
# 分批训练数据 返回值为误差
cost = model.train_on_batch(X_train, y_train)
# 每隔100步输出误差
if step % 100 == 0:
print('train cost:', cost)
#-----------------------------------------------------------
# 运行模型测试 一次传入40个测试散点
cost = model.evaluate(X_test, y_test, batch_size=40)
# 输出误差
print("test cost:", cost)
# 获取权重和误差 layers[0]表示第一个神经层(即Dense)
W, b = model.layers[0].get_weights()
# 输出权重和偏置
print("weights:", W)
print("biases:", b)
#-----------------------------------------------------------
# 可视化绘图
k = k + 1
plt.subplot(5, 2, k)
y_pred = model.predict(X_test)
plt.scatter(X_test, y_test)
plt.plot(X_test, y_pred, "red", label='cost=%.4f k=%d' %(cost,k))
plt.legend()
plt.show()
十六.Keras环境搭建、入门基础及回归神经网络案例
天行健,君子以自强不息。
地势坤,君子以厚德载物。
[1] 杨秀璋. Python网络数据爬取及分析从入门到精通(分析篇)[M]. 北京:北京航天航空大学出版社, 2018.
[2] https://morvanzhou.github.io/tutorials
[3]“莫烦大神” 网易云视频地址
[4] https://study.163.com/course/courseLearn.htm?courseId=1003209007
[5] Keras: The Python Deep Learning library
[6] Keras文本分类 - 基基伟大神
[7] https://github.com/eastmountyxz/AI-for-TensorFlow
[8]《机器学习》周志华
[9] https://github.com/eastmountyxz/AI-for-TensorFlow