Skip to content

Commit 3dc91d3

Browse files
committed
feat: add perovskite solar cells model with hyperparameter optimization
1 parent 40edf00 commit 3dc91d3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+2689
-1867
lines changed

docs/zh/examples/NN.md renamed to docs/zh/examples/perovskite_solar_cells_nn.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# NN(Machine Learning for Perovskite Solar Cells: An Open-Source Pipeline)
1+
# psc_nn(Machine Learning for Perovskite Solar Cells: An Open-Source Pipeline)
22

33
!!! note "注意事项"
44

@@ -9,40 +9,40 @@
99
=== "模型训练命令"
1010

1111
``` sh
12-
python NN.py mode=train
12+
python psc_nn.py mode=train
1313
```
1414

1515
=== "模型评估命令"
1616

1717
``` sh
1818
# 使用本地预训练模型
19-
python NN.py mode=eval eval.pretrained_model_path="Your pdparams path"
19+
python psc_nn.py mode=eval eval.pretrained_model_path="Your pdparams path"
2020
```
2121

2222
``` sh
2323
# 或使用远程预训练模型
24-
python NN.py mode=eval eval.pretrained_model_path="https://paddle-org.bj.bcebos.com/paddlescience/models/NN/solar_cell_pretrained.pdparams"
24+
python psc_nn.py mode=eval eval.pretrained_model_path="https://paddle-org.bj.bcebos.com/paddlescience/models/PerovskiteSolarCells/solar_cell_pretrained.pdparams"
2525
```
2626

2727
| 预训练模型 | 指标 |
2828
|:--| :--|
29-
| [solar_cell_pretrained.pdparams](../params/solar_cell_pretrained.pdparams) | RMSE: 3.91798 |
29+
| [solar_cell_pretrained.pdparams](https://paddle-org.bj.bcebos.com/paddlescience/models/PerovskiteSolarCells/solar_cell_pretrained.pdparams) | RMSE: 3.91798 |
3030

3131
## 1. 背景简介
3232

3333
太阳能电池是一种通过光电效应将光能直接转换为电能的关键能源器件,其性能预测是优化和设计太阳能电池的重要环节。然而,传统的性能预测方法往往依赖于复杂的物理模拟和大量的实验测试,不仅成本高昂,且耗时较长,制约了研究与开发的效率。
3434

3535
近年来,深度学习和机器学习技术的快速发展,为太阳能电池性能预测提供了创新的方法。通过机器学习技术,可以显著加快开发速度,同时实现与实验结果相当的预测精度。特别是在钙钛矿太阳能电池研究中,材料的化学组成和结构多样性为模型训练带来了新的挑战。为了解决这一问题,研究者们通常将材料的特性转换为固定长度的特征向量,以适配机器学习模型。尽管如此,不同性能指标的特征表示设计仍需不断优化,同时对模型预测结果的可解释性要求也更为严格。
3636

37-
本研究中,通过利用包含钙钛矿太阳能电池特性信息的全面数据库(PDP),我们构建并评估了包括 XGBoost、NN 在内的多种机器学习模型,专注于预测短路电流密度(Jsc)。研究结果表明,结合深度学习与超参数优化工具(如 Optuna)能够显著提升太阳能电池设计的效率,为新型太阳能电池研发提供了更精确且高效的解决方案。
37+
本研究中,通过利用包含钙钛矿太阳能电池特性信息的全面数据库(PDP),我们构建并评估了包括 XGBoost、psc_nn 在内的多种机器学习模型,专注于预测短路电流密度(Jsc)。研究结果表明,结合深度学习与超参数优化工具(如 Optuna)能够显著提升太阳能电池设计的效率,为新型太阳能电池研发提供了更精确且高效的解决方案。
3838

3939
## 2. 模型原理
4040

4141
本章节仅对太阳能电池性能预测模型的原理进行简单地介绍,详细的理论推导请阅读 [Machine Learning for Perovskite Solar Cells: An Open-Source Pipeline](https://onlinelibrary.wiley.com/doi/10.1002/apxr.202400060)
4242

4343
该方法的主要思想是通过人工神经网络建立光谱响应数据与短路电流密度(Jsc)之间的非线性映射关系。人工神经网络模型的总体结构如下图所示:
4444

45-
![NN_overview](../images/ML/En.png)
45+
![psc_nn_overview](../images/ML/psc_nn_overview.png)
4646

4747
本案例采用多层感知机(MLP)作为基础模型架构,主要包括以下几个部分:
4848

@@ -70,25 +70,25 @@
7070

7171
为了方便数据处理,我们实现了一个辅助函数 `create_tensor_dict` 来创建输入和标签的 tensor 字典:
7272

73-
``` py linenums="31" title="examples/ML_Pipeline/NN.py"
73+
``` py linenums="31" title="examples/perovskite_solar_cells/psc_nn.py"
7474
--8<--
75-
examples/ML_Pipeline/NN.py:31:37
75+
examples/perovskite_solar_cells/psc_nn.py:31:37
7676
--8<--
7777
```
7878

7979
数据集的读取和预处理代码如下:
8080

81-
``` py linenums="130" title="examples/ML_Pipeline/NN.py"
81+
``` py linenums="118" title="examples/perovskite_solar_cells/psc_nn.py"
8282
--8<--
83-
examples/ML_Pipeline/NN.py:130:141
83+
examples/perovskite_solar_cells/psc_nn.py:118:129
8484
--8<--
8585
```
8686

8787
为了进行超参数优化,我们将训练集进一步划分为训练集和验证集:
8888

89-
``` py linenums="142" title="examples/ML_Pipeline/NN.py"
89+
``` py linenums="130" title="examples/perovskite_solar_cells/psc_nn.py"
9090
--8<--
91-
examples/ML_Pipeline/NN.py:142:147
91+
examples/perovskite_solar_cells/psc_nn.py:130:135
9292
--8<--
9393
```
9494

@@ -104,67 +104,67 @@ examples/ML_Pipeline/NN.py:142:147
104104

105105
模型定义代码如下:
106106

107-
``` py linenums="103" title="examples/ML_Pipeline/NN.py"
107+
``` py linenums="98" title="examples/perovskite_solar_cells/psc_nn.py"
108108
--8<--
109-
examples/ML_Pipeline/NN.py:103:120
109+
examples/perovskite_solar_cells/psc_nn.py:98:115
110110
--8<--
111111
```
112112

113113
### 3.3 损失函数设计
114114

115115
考虑到数据集中不同样本的重要性可能不同,我们设计了一个加权均方误差损失函数。该函数对较大的 Jsc 值赋予更高的权重,以提高模型在高性能太阳能电池上的预测准确性:
116116

117-
``` py linenums="20" title="examples/ML_Pipeline/NN.py"
117+
``` py linenums="20" title="examples/perovskite_solar_cells/psc_nn.py"
118118
--8<--
119-
examples/ML_Pipeline/NN.py:20:30
119+
examples/perovskite_solar_cells/psc_nn.py:20:30
120120
--8<--
121121
```
122122

123123
### 3.4 约束构建
124124

125125
本案例基于数据驱动的方法求解问题,因此使用 PaddleScience 内置的 `SupervisedConstraint` 构建监督约束。为了减少代码重复,我们实现了 `create_constraint` 函数来创建监督约束:
126126

127-
``` py linenums="38" title="examples/ML_Pipeline/NN.py"
127+
``` py linenums="38" title="examples/perovskite_solar_cells/psc_nn.py"
128128
--8<--
129-
examples/ML_Pipeline/NN.py:38:58
129+
examples/perovskite_solar_cells/psc_nn.py:38:58
130130
--8<--
131131
```
132132

133133
### 3.5 评估器构建
134134

135135
为了实时监测模型的训练情况,我们实现了 `create_validator` 函数来创建评估器:
136136

137-
``` py linenums="59" title="examples/ML_Pipeline/NN.py"
137+
``` py linenums="59" title="examples/perovskite_solar_cells/psc_nn.py"
138138
--8<--
139-
examples/ML_Pipeline/NN.py:59:83
139+
examples/perovskite_solar_cells/psc_nn.py:59:78
140140
--8<--
141141
```
142142

143143
### 3.6 优化器构建
144144

145145
为了统一管理优化器和学习率调度器的创建,我们实现了 `create_optimizer` 函数:
146146

147-
``` py linenums="84" title="examples/ML_Pipeline/NN.py"
147+
``` py linenums="79" title="examples/perovskite_solar_cells/psc_nn.py"
148148
--8<--
149-
examples/ML_Pipeline/NN.py:84:102
149+
examples/perovskite_solar_cells/psc_nn.py:79:97
150150
--8<--
151151
```
152152

153153
### 3.7 模型训练与评估
154154

155155
在训练过程中,我们使用上述封装的函数来创建数据字典、约束、评估器和优化器:
156156

157-
``` py linenums="242" title="examples/ML_Pipeline/NN.py"
157+
``` py linenums="230" title="examples/perovskite_solar_cells/psc_nn.py"
158158
--8<--
159-
examples/ML_Pipeline/NN.py:242:296
159+
examples/perovskite_solar_cells/psc_nn.py:230:280
160160
--8<--
161161
```
162162

163163
## 4. 完整代码
164164

165-
``` py linenums="1" title="examples/ML_Pipeline/NN.py"
165+
``` py linenums="1" title="examples/perovskite_solar_cells/psc_nn.py"
166166
--8<--
167-
examples/ML_Pipeline/NN.py
167+
examples/perovskite_solar_cells/psc_nn.py
168168
--8<--
169169
```
170170

0 commit comments

Comments
 (0)