Bohrium
robot
新建

空间站广场

论文
Notebooks
比赛
课程
Apps
我的主页
我的Notebooks
我的论文库
我的足迹

我的工作空间

任务
节点
文件
数据集
镜像
项目
数据库
公开
基于卷积神经网络的锂电池老化模式分析
中文
锂电池
Deep Learning
中文锂电池Deep Learning
KaiqiYang
发布于 2023-09-01
推荐镜像 :Basic Image:bohrium-notebook:2023-04-07
推荐机型 :c12_m46_1 * NVIDIA GPU B
1
6
DTW-Li-ion-Diagnosis(v1)

基于卷积神经网络的锂电池老化模式分析

锂离子电池在现代社会无处不在,存在于储能系统、电动汽车、便携式电子产品等许多应用中。因此,为了实现锂离子电池系统的安全可靠使用,诊断和预防已变得至关重要。在人工智能领域,深度学习算法在图像或对象识别方面取得了重大影响,然而它们在电池诊断方面的应用还处于初级发展阶段。在本notebook中展示了一种基于将电池数据表示为图像的电池退化诊断方法,以利用成熟的卷积神经网络,通过合成的数据集的电压信号,定量分析出不同情况下电池的老化模式。notebook内容改编搬运自GitHub,参考论文Costa el al.

锂离子电池中的退化是电池内部复杂的物理化学机制相互作用的结果,导致容量和功率的衰减。退化取决于使用路径,不同的使用条件(例如温度、载流、工作周期、放电深度、截止电压等)可能抑制或加剧特定的退化机制。退化机制包括SEI增长和分解、粘结剂分解、天然石墨剥落或结晶隔离,尽管退化机制起源和性质各异,但它们对电化学响应的影响仅有有限的几种。这些广泛的退化机制可以归类为几种退化模式,即活性锂损失(LLI)、负极和正极(NE和PE)的活性材料损失(LAM)以及动力学变化。

LLI通常是退化的主要来源,是由寄生反应消耗锂引起的,几乎总是完全导致容量衰减,并且它可以在半电池配置中建模为负极的“滑移”,相反,LAM的问题需要分解到电极或者混合物的水平,并且是由于用于脱嵌锂的活性物质量改变导致的。LAM通常在初期不会在石墨基电池中直接导致容量损失,因此它们可以称为“静音”或“隐藏”模式。这是因为锂电池会在全电池电压窗口之外为每个电极提供过剩的相对容量。

notebook中提到的方法流程如下所示:在预处理步骤中, IC曲线被输入到DTW算法中,并且计算了计算它们的图像表示。随后,经过处理的 IC 图像由一个 CNN 处理,数值化地量化每种退化模式的百分比。IC曲线图不能直接使用来预测老化机制,因为它们没有包含足够的像素点。在我们的图像中,形状、对称性和颜色的变化都反映了IC曲线的变化。 image.png

代码
文本

安装需要使用的python包

代码
文本
[1]
!pip install dtaidistance -q
!pip install wandb -q
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
代码
文本

载入需要的环境

代码
文本
[2]
import numpy as np
import matplotlib.pyplot as plt
from dtaidistance import dtw
from dtaidistance import dtw_visualisation as dtwvis
import matplotlib.pyplot as plt
import warnings
import sys
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Input, Dense, Conv2D, MaxPooling2D, Flatten, Masking, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import ModelCheckpoint
from joblib import dump
from joblib import load
from sklearn.ensemble import RandomForestRegressor
import tensorflow as tf

sys.path.append('/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/')
import utils
warnings.filterwarnings("ignore")
2023-09-01 13:30:57.405409: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2023-09-01 13:31:00.736202: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/mpi/gcc/openmpi-4.1.0rc5/lib:/usr/local/nccl-rdma-sharp-plugins/lib:/usr/local/nvidia/lib64:/usr/local/cuda/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2023-09-01 13:31:00.737928: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/mpi/gcc/openmpi-4.1.0rc5/lib:/usr/local/nccl-rdma-sharp-plugins/lib:/usr/local/nvidia/lib64:/usr/local/cuda/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64
2023-09-01 13:31:00.737942: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.
代码
文本

载入数据:本案例中使用的数据分辨率为电压窗口上1001个点。为了减少计算图像的时间,使用Scipy Pchip 插值器进行1D单调立方插值,将分辨率下采样到每条IC曲线2.3 mV一个点。这保留了感兴趣的主要特征,同时限制了文件大小。因此,生成的图像都是128 x 128像素。dtaidistance包用于计算DTW矩阵。

代码
文本
[3]
chemistry = 'LFP' #选择测试LFP数据,还包含NCA NMC的数据
path = '/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/mat/'+chemistry
size = 128
Q = utils.read_mat('/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/mat/Q.mat')['Qnorm'].flatten()
x_test_0 = utils.read_mat(path+'/x_test_1.mat')['x_test'].T
y_test = utils.read_mat(path+'/y_test.mat')['y_test']
代码
文本

选取一个样本的fresh电压和老化电压曲线绘制对比,y_test中包含了各类退化模式的百分比。

代码
文本
[4]
print(x_test_0.shape) # 观察输入数据的结构,可以看到包含1000个sample,每个sample有6个不同的cycle,每个都包含1001个电压点
sample = np.random.randint(0, x_test_0.shape[0], 1).item() #随机选取一个sample
cycle = np.random.randint(1, x_test_0.shape[1], 1).item() #数据中包含6个不同cycle的
pristine_curve = x_test_0[0, 0] #定义fresh状态下的电压曲线
aged_curve = x_test_0[sample, cycle] #定义老化后的电压曲线

print("Degradation modes at sample "+str(sample)+" cycle "+str(cycle)+".\n\tLLI:", y_test[sample][cycle][0], "LAMPE:", y_test[sample][cycle][1], "LAMNE:", y_test[sample][cycle][2])

plt.title("Voltage curve")
plt.plot(Q, pristine_curve, label="fresh")
plt.plot(Q, aged_curve, label="aged")
plt.xlabel("Q")
plt.ylabel("Voltage (V)")
plt.legend()
plt.show()
代码
文本

绘制IC曲线,IC曲线包含的是容量对于电压的微分,同样对比fresh和老化之后的IC曲线,此处生产IC曲线用到的函数包含在数据集中的utils中。也可以直接下载数据集中的文件进行阅读。

可以发现老化之后的电池IC曲线和fresh状态下存在明显区别,并且不同老化模式对IC曲线的影响也是不同的。

代码
文本
[5]
# Convert to IC representation
ui, dqi = utils.IC(pristine_curve, Q, utils.UI_STEP, utils.MIN_V_LFP, utils.MAX_V_LFP)
IC_pristine = utils.reduce_size(ui, dqi, size)
ui, dqi = utils.IC(aged_curve, Q, utils.UI_STEP, utils.MIN_V_LFP, utils.MAX_V_LFP)
IC_aged = utils.reduce_size(ui, dqi, size)
plt.title("IC curve")
plt.plot(np.linspace(utils.MIN_V_LFP, utils.MAX_V_LFP, size), IC_pristine, label="fresh")
plt.plot(np.linspace(utils.MIN_V_LFP, utils.MAX_V_LFP, size), IC_aged, label="aged")
plt.xlabel("Voltage (V)")
plt.ylabel("Incremental capacity (Ah/V)")
plt.legend()
plt.show()
代码
文本

进一步我们通过DTW算法(一种动态时间规整算法,计算2个时间序列尤其是不同长度序列相似度的一种动态规划算法)来计算老化IC曲线和fresh电池IC曲线的相似性,并且保留完整的图像作为后续训练的输入。图像中包含的信息,比单纯对比IC曲线更加丰富,原因就是IC曲线的分辨率经常是不足的,直接对比的效果差,而图像中形状、对称性和颜色的变化都反映了IC曲线的变化。

代码
文本
[6]
d, paths = dtw.warping_paths(IC_pristine, IC_aged, window=int(size/2), psi=2)
print("Warping paths represented as a set of pixels")
fig, ax = dtwvis.plot_warpingpaths(IC_pristine, IC_aged, paths)
plt.show()

# Process data
# mask values that are not filled
x = np.where(paths == np.inf, -99, paths)
# negative values are replaced by 0
x = np.where(x < 0, 0, x)
# normalise values
x = x/np.max(x)
# reshape the array
x = np.expand_dims(x, -1).astype("float32")
print("Resulting image for sample "+str(sample)+" cycle "+str(cycle))
plt.imshow(x, cmap="inferno")
plt.show()
代码
文本

展示了相关的数据生产方法,进一步我们定义网络结构并进行训练预测

代码
文本
[7]
class CNN_DTW:
def __init__(self, size):
self.size = size
self.model = Sequential([
# Note the input shape is the desired size of the image sizexsize with 1 color channel
Masking(mask_value=-99.0, input_shape=(self.size, self.size, 1)),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2,2),
Conv2D(64, (3,3), activation='relu'),
MaxPooling2D(2,2),
Conv2D(128, (3,3), activation='relu'),
MaxPooling2D(2,2),
Conv2D(128, (3,3), activation='relu'),
MaxPooling2D(2,2),
Flatten(),
Dropout(0.5),
Dense(512, activation='relu'),
Dense(3, activation='sigmoid')
])
def fit(self, X, y, LR, batch_size, callbacks):
self.model.compile(loss='mse', optimizer=Adam(learning_rate=LR), metrics=['mse'])
self.model.fit(X, y, epochs=500, batch_size=batch_size, validation_split=0.2, verbose=2, callbacks=callbacks, shuffle=True)

def save_model(self, path):
self.model.save(path+'.h5')
代码
文本

为了作为对比,增加没有使用DTW图像数据,而是直接使用IC曲线进行训练的随机森林(RF),一维卷积神经网络(1DConv),前馈神经网络(FFN)作为对比。 同样给出这几种模型的建模:

代码
文本
[8]
#定义一维卷积神经网络:
class CNN_1D:
def __init__(self, len):
self.len = len
self.model = Sequential([
# input layer
Input(shape=(self.len, 1)),
# 1D convolutional layer
Conv1D(filters=32, kernel_size=4, strides=2, activation='relu'),
# max pooling layer
MaxPooling1D(pool_size=2, strides=2),
# 1D convolutional layer
Conv1D(filters=32, kernel_size=4, strides=2, activation='relu'),
# max pooling layer
MaxPooling1D(pool_size=2, strides=2),
# three fully connected layers of sizes 128, 64 and 32
Flatten(),
Dense(128, activation='relu'),
Dense(64, activation='relu'),
Dense(3, activation='sigmoid')
])
def fit(self, X, y):
self.model.compile(loss='mse', optimizer=Adam(learning_rate=0.001), metrics=['mse'])
callbacks = [ModelCheckpoint(filepath='./checkpoints/checkpoint', monitor='val_loss', mode='min', verbose=1, save_best_only=True, save_weights_only=True)]
self.model.fit(X, y, epochs=50, batch_size=32, validation_split=0.2, verbose=2, callbacks=callbacks, shuffle=True)

def save_model(self, path):
self.model.save(path+'.h5')
# 定义随机森林方法:
class RandomForest:
def __init__(self, max_depth, random_state, n_estimators):
self.max_depth = max_depth
self.random_state = random_state
self.n_estimators = n_estimators
def fit(self, X, y):
self.model = RandomForestRegressor(max_depth=self.max_depth, random_state=self.random_state, n_estimators=self.n_estimators)
self.model.fit(X, y)

def save_model(self, path):
self.dump(self.model, path+'.joblib')

#定义前馈神经网络方法:
class FFN:
def __init__(self, len):
self.len = len
self.model = Sequential([
Dense(64, input_dim=self.len, activation='relu'),
Dense(32, activation='relu'),
Dense(3, activation='sigmoid')
])
def fit(self, X, y):
self.model.compile(loss='mse', optimizer='adam', metrics=['mse'])
self.model.fit(X, y, epochs=100, batch_size=32, validation_split=0.2, verbose=1)

def save_model(self, path):
self.model.save(path+'.h5')
代码
文本

这里,我们导入已经训练好的模型,对四种模型的效果进行比较,选择LFP的结果作为展示

代码
文本
[9]
chemistry = 'LFP' # 'LFP' or 'NMC' or 'NCA'

path = '/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/mat/'+chemistry
size = utils.SIZE
min_val = utils.LFP_MIN # utils.NMC_MIN or utils.NCA_MIN
max_val = utils.LFP_MAX # utils.NMC_MAX or utils.NCA_MAX
Q = utils.read_mat('/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/mat/Q.mat')['Qnorm'].flatten()
y_test = utils.read_mat(path+'/y_test.mat')['y_test']

x_test_1 = utils.read_mat(path+'/x_test_1.mat')['x_test'].T
x_test_2 = utils.read_mat(path+'/x_test_2.mat')['x_test'].T
x_test_3 = utils.read_mat(path+'/x_test_3.mat')['x_test'].T
代码
文本

对比三个测试集中的同一个cycle的电压曲线和IC曲线,可以发现IC曲线中的差异更加明显,比直接从电压曲线中更容易读取到信息。

代码
文本
[10]
duty = np.random.randint(0, y_test.shape[0])
cycle = np.random.randint(0, y_test.shape[1])

datasets = [x_test_1, x_test_2, x_test_3]
labels = ['x_test_1', 'x_test_2', 'x_test_3']

plt.title("Voltage curve")
for i, data in enumerate(datasets):
plt.plot(Q, data[duty, cycle], label=labels[i])
plt.legend()
plt.show()

# convert data to IC
plt.title("IC curve")
for i, data in enumerate(datasets):
ui, dqi = utils.IC(data[duty,cycle], Q)
plt.plot(utils.reduce_size(ui, dqi, size), label=labels[i])
plt.legend()
plt.show()
代码
文本

把测试数据进行处理,把老化模型的百分比除以100

代码
文本
[11]
y_test = y_test/100
y_test = y_test.reshape(-1, y_test.shape[2])

processed_test_datasets = []

# x_test_0 is part of the training set, so we don't need it
for dataset in datasets:
dataset = dataset.reshape(-1, dataset.shape[2])
dataset = utils.convert_to_input_data(dataset, Q, size-1, chemistry)
dataset = utils.normalise_data(dataset, min_val, max_val)
processed_test_datasets.append(dataset)
代码
文本

载入已经训练好的模型

代码
文本
[12]
# Models
model_RF = load('/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/saved/'+chemistry+'/model-RF.joblib')
model_FFN = tf.keras.models.load_model('/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/saved/'+chemistry+'/model-MLP.h5')
model_CNN = tf.keras.models.load_model('/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/saved/'+chemistry+'/model-CNN.h5')
model_DTW = tf.keras.models.load_model('/bohr/DTW-li-ion-diagnosis-czgi/v1/DTW-Li-ion-Diagnosis/saved/'+chemistry+'/model-DTWCNN.h5')
代码
文本

对比四种方法的计算结果,这里的误差采用的是 RMSPE,对比四种方法,可以发现通过图像处理方法得到的结果更加准确,这里分别三个测试集中10 50 100 200 400 1000圈的老化模式误差。

代码
文本
[13]
# FFN
print("前馈神经网络效果")
utils.get_pred(model_FFN, processed_test_datasets, y_test, False, False)
# RF
print("随机森林效果")
utils.get_pred(model_RF, processed_test_datasets, y_test, False, False)
# 1D conv
print("1维卷积神经网络效果")
utils.get_pred(model_CNN, processed_test_datasets, y_test, True, False)
# DTW CNN
print("DTW图像的卷积神经网络效果")
V_references = utils.read_mat(path+'/V_references.mat')['V_references']

processed_test_datasets_DTW = []

# 本部处理需要几分钟
for V, x_test in zip(V_references, processed_test_datasets):
# get IC reference
ui, dqi = utils.IC(V, Q, utils.UI_STEP, utils.MIN_V_LFP, utils.MAX_V_LFP) # change to NCA/NMC if needed
new_sample = utils.reduce_size(ui, dqi, size-1)
IC_reference = utils.normalise_data(new_sample, min_val, max_val)
# get DTW images
processed_test_datasets_DTW.append(utils.get_DTWImages(x_test, IC_reference, size))
utils.get_pred(model_DTW, processed_test_datasets_DTW, y_test, False, True)
前馈神经网络效果
32/32 [==============================] - 3s 1ms/step
32/32 [==============================] - 0s 994us/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 992us/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 978us/step
10 50 100 200 400 1000
LLI 1.897387 1.937746 2.004652 1.820727 1.672401 3.916146
LAMPE 2.533826 2.903455 3.098659 3.285527 3.583621 11.118142
LAMNE 2.303765 2.328016 2.321713 2.103640 2.159654 6.319308
32/32 [==============================] - 0s 982us/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 995us/step
32/32 [==============================] - 0s 999us/step
10 50 100 200 400 1000
LLI 2.065159 2.166341 2.234196 1.811591 1.558170 3.679649
LAMPE 3.302189 2.941345 2.948705 2.735348 3.465126 11.320684
LAMNE 3.413675 3.294413 3.289093 2.778901 2.350682 6.191302
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 964us/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 993us/step
10 50 100 200 400 1000
LLI 1.451380 1.931783 1.889350 1.684941 1.733579 4.029704
LAMPE 2.272202 3.145732 3.404698 3.524636 3.784330 11.310487
LAMNE 3.047855 3.068851 2.984352 2.648277 2.443733 6.378585
随机森林效果
10 50 100 200 400 1000
LLI 6.326812 5.696067 4.940409 3.629421 3.233855 9.211487
LAMPE 5.896490 5.132423 4.262228 3.153127 5.164388 9.136563
LAMNE 7.002441 6.064502 5.020779 3.820403 6.249853 11.837801
10 50 100 200 400 1000
LLI 6.326812 5.696067 4.940409 3.642654 3.148818 9.222205
LAMPE 5.896490 5.132423 4.262228 3.172645 4.971949 9.793606
LAMNE 7.002441 6.064502 5.020779 3.826087 6.381696 11.558122
10 50 100 200 400 1000
LLI 6.326812 5.696067 4.940409 3.629421 3.201966 9.135190
LAMPE 5.896490 5.132423 4.262228 3.153127 5.071271 9.375053
LAMNE 7.002441 6.064502 5.020779 3.820403 6.185985 11.665670
1维卷积神经网络效果
32/32 [==============================] - 3s 2ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
10 50 100 200 400 1000
LLI 1.180207 0.951203 0.733230 1.065123 1.689569 3.216216
LAMPE 1.901536 1.238536 1.805411 2.801487 3.385905 10.737504
LAMNE 1.182501 1.336198 1.271987 1.719756 2.833926 6.605925
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
10 50 100 200 400 1000
LLI 0.630394 0.596814 0.860183 1.113128 1.621577 3.155063
LAMPE 0.418775 1.289180 2.760916 2.629114 3.504883 10.856303
LAMNE 2.050357 1.832850 2.030776 2.364678 2.864635 6.581639
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
32/32 [==============================] - 0s 1ms/step
10 50 100 200 400 1000
LLI 1.950258 0.899970 0.604320 0.969911 1.752042 3.351155
LAMPE 2.085785 1.158399 2.012011 2.957312 3.447961 10.860979
LAMNE 2.867555 1.979411 1.591946 2.074956 2.930548 6.616024
DTW图像的卷积神经网络效果
32/32 [==============================] - 0s 5ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
10 50 100 200 400 1000
LLI 0.147196 0.533658 0.728286 1.161802 1.312177 2.474985
LAMPE 0.968427 0.983055 1.826342 2.673091 3.591306 8.643712
LAMNE 0.177229 0.706995 1.408830 1.984942 1.932054 3.867265
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
10 50 100 200 400 1000
LLI 0.449007 0.842166 0.916717 1.186618 1.325559 2.155543
LAMPE 0.785202 2.067853 2.765923 3.220182 3.926521 8.893262
LAMNE 0.216501 0.574732 0.800012 1.117781 1.418099 4.011069
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
32/32 [==============================] - 0s 3ms/step
10 50 100 200 400 1000
LLI 0.800950 0.568149 0.565061 0.953905 1.120238 2.588985
LAMPE 2.309712 1.322498 2.038502 2.723597 3.678208 8.632853
LAMNE 0.599812 0.553767 1.003389 1.433580 1.640688 3.940037
代码
文本
[ ]

代码
文本
中文
锂电池
Deep Learning
中文锂电池Deep Learning
点个赞吧
本文被以下合集收录
电化学-电池计算
hjchen
更新于 2024-06-13
7 篇9 人关注
Data driven SOH estimation
Samuel
更新于 2024-09-09
2 篇0 人关注
推荐阅读
公开
通过电压特征来预测电芯剩余寿命
中文锂电池
中文锂电池
KaiqiYang
发布于 2023-08-22
4 赞7 转存文件
公开
AI+电芯 | 多任务预测电池容量和功率衰减
AI+电芯
AI+电芯
JiaweiMiao
发布于 2023-12-11
4 转存文件