本Python笔记本显示和分析了如何处理NASA获得的电池充电/放电数据集。

对于这个模型的训练阶段,需要安装Python 3.x以及以下库:

Tensorflow 2.0

Numpy

Pandas

Scipy

Sci-kit learn

Matplot

Seaborn

对于该模型的预测阶段,除了Matplot和Seaborn之外,需要使用相同的库。

1.数据集的准备

需要下载数据集,然后将其解压缩到特定的目录中。

%tensorflow_version 2.x
%matplotlib inline
!pip show tensorflow
!wget -cq https://ti.arc.nasa.gov/c/5 -O naza.zip
!unzip -qqo naza.zip -d battery_data

在此部分中,所有处理数据集所需的库都很重要。

import datetime
import numpy as np
import pandas as pd
from scipy.io import loadmat
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import mean_squared_error
from sklearn import metrics
import matplotlib.pyplot as plt
import seaborn as sns

2.将数据集加载到内存

数据存储在多个“.mat”文件中。每个文件对应于特定的电池,每个文件的数据结构如下:

在Python中创建了一个函数,负责从"mat"文件中读取这些数据,并将它们存储在内存中以供以后访问,加载数据集后,使用panda函数对数据进行描述,以验证数据加载是否正确。

def load_data(battery):mat = loadmat('battery_data/' + battery + '.mat')print('Total data in dataset: ', len(mat[battery][0, 0]['cycle'][0]))counter = 0dataset = []capacity_data = []for i in range(len(mat[battery][0, 0]['cycle'][0])):row = mat[battery][0, 0]['cycle'][0, i]if row['type'][0] == 'discharge':ambient_temperature = row['ambient_temperature'][0][0]date_time = datetime.datetime(int(row['time'][0][0]),int(row['time'][0][1]),int(row['time'][0][2]),int(row['time'][0][3]),int(row['time'][0][4])) + datetime.timedelta(seconds=int(row['time'][0][5]))data = row['data']capacity = data[0][0]['Capacity'][0][0]for j in range(len(data[0][0]['Voltage_measured'][0])):voltage_measured = data[0][0]['Voltage_measured'][0][j]current_measured = data[0][0]['Current_measured'][0][j]temperature_measured = data[0][0]['Temperature_measured'][0][j]current_load = data[0][0]['Current_load'][0][j]voltage_load = data[0][0]['Voltage_load'][0][j]time = data[0][0]['Time'][0][j]dataset.append([counter + 1, ambient_temperature, date_time, capacity,voltage_measured, current_measured,temperature_measured, current_load,voltage_load, time])capacity_data.append([counter + 1, ambient_temperature, date_time, capacity])counter = counter + 1print(dataset[0])return [pd.DataFrame(data=dataset,columns=['cycle', 'ambient_temperature', 'datetime','capacity', 'voltage_measured','current_measured', 'temperature_measured','current_load', 'voltage_load', 'time']),pd.DataFrame(data=capacity_data,columns=['cycle', 'ambient_temperature', 'datetime','capacity'])]
dataset, capacity = load_data('B0005')
pd.set_option('display.max_columns', 10)
print(dataset.head())
dataset.describe()

下图显示了随着充电周期的推进,电池的老化过程。水平线表示与电池生命周期结束相关的阈值。

plot_df = capacity.loc[(capacity['cycle']>=1),['cycle','capacity']]
sns.set_style("darkgrid")
plt.figure(figsize=(12, 8))
plt.plot(plot_df['cycle'], plot_df['capacity'])
#Draw threshold
plt.plot([0.,len(capacity)], [1.4, 1.4])
plt.ylabel('Capacity')
# make x-axis ticks legible
adf = plt.gca().get_xaxis().get_major_formatter()
plt.xlabel('cycle')
plt.title('Discharge B0005')

还需计算电池的SOH值:

attrib=['cycle', 'datetime', 'capacity']
dis_ele = capacity[attrib]
C = dis_ele['capacity'][0]
for i in range(len(dis_ele)):dis_ele['SoH']=(dis_ele['capacity'])/C
print(dis_ele.head(5))

和以前所作的一样,每个周期都绘制一个SOH图表,水平线代表70%的阈值,即电池已经达到其使用寿命,因此建议进行更换。

plot_df = dis_ele.loc[(dis_ele['cycle']>=1),['cycle','SoH']]
sns.set_style("white")
plt.figure(figsize=(8, 5))
plt.plot(plot_df['cycle'], plot_df['SoH'])
#Draw threshold
plt.plot([0.,len(capacity)], [0.70, 0.70])
plt.ylabel('SOH')
# make x-axis ticks legible
adf = plt.gca().get_xaxis().get_major_formatter()
plt.xlabel('cycle')
plt.title('Discharge B0005')

3.SOH计算的训练阶段

准备了数据集,以便Tensorflow可以在训练阶段使用,为此创建两个结构,对应于预期的输入和输出。数据集的相关特征是:

电池容量、电压、电流、温度、负载电压、负载电流、时间。

对于输出数据,计算电池的SOH,以及在两种情况下的输入和输出,这些值被归一化到[0-1]之间的值。

C = dataset['capacity'][0]
soh = []
for i in range(len(dataset)):soh.append([dataset['capacity'][i] / C])
soh = pd.DataFrame(data=soh, columns=['SoH'])attribs=['capacity', 'voltage_measured', 'current_measured','temperature_measured', 'current_load', 'voltage_load', 'time']
train_dataset = dataset[attribs]
sc = MinMaxScaler(feature_range=(0,1))
train_dataset = sc.fit_transform(train_dataset)
print(train_dataset.shape)
print(soh.shape)
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import LSTM
from tensorflow.keras.optimizers import Adam

总训练参数:27;

可训练参数:27。

对该模型进行训练,epoch=50;

model.fit(x=train_dataset, y=soh.to_numpy(), batch_size=25, epochs=50)

第二节传送门:

深度学习模型的准备和使用教程,LSTM用于锂电池SOH预测(第二节)(附Python的jypter源代码)_新能源姥大的博客-CSDN博客

深度学习模型的准备和使用教程,LSTM用于锂电池SOH预测(第一节)(附Python的jypter源代码)相关推荐

  1. 深度学习模型的准备和使用教程,LSTM用于锂电池SOH预测(第二节)(附Python的jypter源代码)

    测试SOH预测模型 为测试模型的正确性,对同一电池 (B0006) 进行充电. dataset_val, capacity_val = load_data('B0006') attrib=['cycl ...

  2. 用Windows电脑训练深度学习模型?超详细配置教程来了

    选自towardsdatascience 作者:Ahinand 机器之心编译 编辑:Panda 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可 ...

  3. tensorflow linux多卡训练_用Windows电脑训练深度学习模型?超详细配置教程来了

    公众号关注 "DL-CVer" 设为 "星标",DLCV消息即可送达! 转自 机器之心 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Window ...

  4. windows python 访问mtp存储空间_用Windows电脑训练深度学习模型?超详细配置教程来了...

    虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可能是很多机器学习初学者更为熟悉的系统.要在 Windows 上开发模型,首先当然是配置开发环境. ...

  5. windows所有版本列表_用Windows电脑训练深度学习模型?超详细配置教程来了

    选自towardsdatascience 作者:Ahinand 机器之心编译 编辑:Panda 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可 ...

  6. tensorflow linux多卡训练_用 Windows 电脑训练深度学习模型?超详细配置教程来了...

    点击上方 蓝色小字 ,关注 并 星标 ,更多干货,第一时间送达 转载自公众号:AI有道 虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可能是很多 ...

  7. tflearn教程_利用 TFLearn 快速搭建经典深度学习模型

    使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<TensorFlow 增加自定义运算符>).由于运算符的 ...

  8. 不用GPU,稀疏化也能加速你的YOLOv3深度学习模型

    水木番 发自 凹非寺 来自|量子位 你还在为神经网络模型里的冗余信息烦恼吗? 或者手上只有CPU,对一些只能用昂贵的GPU建立的深度学习模型"望眼欲穿"吗? 最近,创业公司Neur ...

  9. python打包exe之打包深度学习模型踩坑记录及其解决办法。

    在现实生活中,有时候我们写的程序需要发给小伙伴用,而小伙伴没有python,这时候我们需要将程序打包成exe文件发给小伙伴用. 今天讲下打包深度学习模型 打包一般要用到cmd命令行,要求cmd能执行p ...

最新文章

  1. nginx源码分析--内存对齐处理
  2. Linux-Load Average解析
  3. 用Visual Studio .Net 2003开发PHP程序
  4. 一句代码实现 HTML5 语音搜索
  5. 系统架构师笔记(1)
  6. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之完成登录功能...
  7. 宁夏警官学院计算机专业,宁夏警官职业学院毕业设计模板.docx
  8. 批量读写变换图片(转)
  9. Leetcode每日一题:376.wiggle-subsequence(摆动的序列)
  10. 初次使用uwsgi:no python application found, check your startup logs for errors
  11. Android 10系统新特性解读
  12. 【Paper】DeepConvLSTM:Deep Convolutional and LSTM RNN for Multimodal Wearable Activity Recognition
  13. 计算机保研面试-英语问题
  14. webpack2系列step1--HTML
  15. 【CSS】span标签设置宽度
  16. 2022内蒙古最新建筑施工塔式起重机(建筑特种作业)模拟考试题库及答案
  17. IHS Markit:苹果16英寸MacBook Pro将采用英特尔第9代处理器
  18. kafka 0.10.0.0 版本
  19. 2022中科院分区表即将公布,多方官宣:或将弃用影响因子
  20. 模拟冯.诺依曼计算机

热门文章

  1. 怪物猎人服务器维护时间,《怪物猎人OL》1月4日全服维护更新公告
  2. 大数据时代的廉政制度创新
  3. Linux-安装JDK并配置JDK环境变量
  4. java steam reduce_Java Stream
  5. 向eclipse中倒入存在的文件之后报错
  6. Perf火焰图生成及分析
  7. 如何为您的入耳式监护仪制作一次性套管
  8. OBS采集黑屏问题解决
  9. idea断点调试详细步骤
  10. 朴素贝叶斯分类器(附代码)