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)
2
2
3
3
!!! note "注意事项"
4
4
9
9
=== "模型训练命令"
10
10
11
11
``` sh
12
- python NN .py mode=train
12
+ python psc_nn .py mode=train
13
13
```
14
14
15
15
=== "模型评估命令"
16
16
17
17
``` sh
18
18
# 使用本地预训练模型
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"
20
20
```
21
21
22
22
``` sh
23
23
# 或使用远程预训练模型
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"
25
25
```
26
26
27
27
| 预训练模型 | 指标 |
28
28
| :--| :--|
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 |
30
30
31
31
## 1. 背景简介
32
32
33
33
太阳能电池是一种通过光电效应将光能直接转换为电能的关键能源器件,其性能预测是优化和设计太阳能电池的重要环节。然而,传统的性能预测方法往往依赖于复杂的物理模拟和大量的实验测试,不仅成本高昂,且耗时较长,制约了研究与开发的效率。
34
34
35
35
近年来,深度学习和机器学习技术的快速发展,为太阳能电池性能预测提供了创新的方法。通过机器学习技术,可以显著加快开发速度,同时实现与实验结果相当的预测精度。特别是在钙钛矿太阳能电池研究中,材料的化学组成和结构多样性为模型训练带来了新的挑战。为了解决这一问题,研究者们通常将材料的特性转换为固定长度的特征向量,以适配机器学习模型。尽管如此,不同性能指标的特征表示设计仍需不断优化,同时对模型预测结果的可解释性要求也更为严格。
36
36
37
- 本研究中,通过利用包含钙钛矿太阳能电池特性信息的全面数据库(PDP),我们构建并评估了包括 XGBoost、NN 在内的多种机器学习模型,专注于预测短路电流密度(Jsc)。研究结果表明,结合深度学习与超参数优化工具(如 Optuna)能够显著提升太阳能电池设计的效率,为新型太阳能电池研发提供了更精确且高效的解决方案。
37
+ 本研究中,通过利用包含钙钛矿太阳能电池特性信息的全面数据库(PDP),我们构建并评估了包括 XGBoost、psc_nn 在内的多种机器学习模型,专注于预测短路电流密度(Jsc)。研究结果表明,结合深度学习与超参数优化工具(如 Optuna)能够显著提升太阳能电池设计的效率,为新型太阳能电池研发提供了更精确且高效的解决方案。
38
38
39
39
## 2. 模型原理
40
40
41
41
本章节仅对太阳能电池性能预测模型的原理进行简单地介绍,详细的理论推导请阅读 [ Machine Learning for Perovskite Solar Cells: An Open-Source Pipeline] ( https://onlinelibrary.wiley.com/doi/10.1002/apxr.202400060 ) 。
42
42
43
43
该方法的主要思想是通过人工神经网络建立光谱响应数据与短路电流密度(Jsc)之间的非线性映射关系。人工神经网络模型的总体结构如下图所示:
44
44
45
- ![ NN_overview ] ( ../images/ML/En .png )
45
+ ![ psc_nn_overview ] ( ../images/ML/psc_nn_overview .png )
46
46
47
47
本案例采用多层感知机(MLP)作为基础模型架构,主要包括以下几个部分:
48
48
70
70
71
71
为了方便数据处理,我们实现了一个辅助函数 ` create_tensor_dict ` 来创建输入和标签的 tensor 字典:
72
72
73
- ``` py linenums="31" title="examples/ML_Pipeline/NN .py"
73
+ ``` py linenums="31" title="examples/perovskite_solar_cells/psc_nn .py"
74
74
-- 8 < --
75
- examples/ ML_Pipeline / NN .py:31 :37
75
+ examples/ perovskite_solar_cells / psc_nn .py:31 :37
76
76
-- 8 < --
77
77
```
78
78
79
79
数据集的读取和预处理代码如下:
80
80
81
- ``` py linenums="130 " title="examples/ML_Pipeline/NN .py"
81
+ ``` py linenums="118 " title="examples/perovskite_solar_cells/psc_nn .py"
82
82
-- 8 < --
83
- examples/ ML_Pipeline / NN .py:130 : 141
83
+ examples/ perovskite_solar_cells / psc_nn .py:118 : 129
84
84
-- 8 < --
85
85
```
86
86
87
87
为了进行超参数优化,我们将训练集进一步划分为训练集和验证集:
88
88
89
- ``` py linenums="142 " title="examples/ML_Pipeline/NN .py"
89
+ ``` py linenums="130 " title="examples/perovskite_solar_cells/psc_nn .py"
90
90
-- 8 < --
91
- examples/ ML_Pipeline / NN .py:142 : 147
91
+ examples/ perovskite_solar_cells / psc_nn .py:130 : 135
92
92
-- 8 < --
93
93
```
94
94
@@ -104,67 +104,67 @@ examples/ML_Pipeline/NN.py:142:147
104
104
105
105
模型定义代码如下:
106
106
107
- ``` py linenums="103 " title="examples/ML_Pipeline/NN .py"
107
+ ``` py linenums="98 " title="examples/perovskite_solar_cells/psc_nn .py"
108
108
-- 8 < --
109
- examples/ ML_Pipeline / NN .py:103 : 120
109
+ examples/ perovskite_solar_cells / psc_nn .py:98 : 115
110
110
-- 8 < --
111
111
```
112
112
113
113
### 3.3 损失函数设计
114
114
115
115
考虑到数据集中不同样本的重要性可能不同,我们设计了一个加权均方误差损失函数。该函数对较大的 Jsc 值赋予更高的权重,以提高模型在高性能太阳能电池上的预测准确性:
116
116
117
- ``` py linenums="20" title="examples/ML_Pipeline/NN .py"
117
+ ``` py linenums="20" title="examples/perovskite_solar_cells/psc_nn .py"
118
118
-- 8 < --
119
- examples/ ML_Pipeline / NN .py:20 :30
119
+ examples/ perovskite_solar_cells / psc_nn .py:20 :30
120
120
-- 8 < --
121
121
```
122
122
123
123
### 3.4 约束构建
124
124
125
125
本案例基于数据驱动的方法求解问题,因此使用 PaddleScience 内置的 ` SupervisedConstraint ` 构建监督约束。为了减少代码重复,我们实现了 ` create_constraint ` 函数来创建监督约束:
126
126
127
- ``` py linenums="38" title="examples/ML_Pipeline/NN .py"
127
+ ``` py linenums="38" title="examples/perovskite_solar_cells/psc_nn .py"
128
128
-- 8 < --
129
- examples/ ML_Pipeline / NN .py:38 :58
129
+ examples/ perovskite_solar_cells / psc_nn .py:38 :58
130
130
-- 8 < --
131
131
```
132
132
133
133
### 3.5 评估器构建
134
134
135
135
为了实时监测模型的训练情况,我们实现了 ` create_validator ` 函数来创建评估器:
136
136
137
- ``` py linenums="59" title="examples/ML_Pipeline/NN .py"
137
+ ``` py linenums="59" title="examples/perovskite_solar_cells/psc_nn .py"
138
138
-- 8 < --
139
- examples/ ML_Pipeline / NN .py:59 :83
139
+ examples/ perovskite_solar_cells / psc_nn .py:59 :78
140
140
-- 8 < --
141
141
```
142
142
143
143
### 3.6 优化器构建
144
144
145
145
为了统一管理优化器和学习率调度器的创建,我们实现了 ` create_optimizer ` 函数:
146
146
147
- ``` py linenums="84 " title="examples/ML_Pipeline/NN .py"
147
+ ``` py linenums="79 " title="examples/perovskite_solar_cells/psc_nn .py"
148
148
-- 8 < --
149
- examples/ ML_Pipeline / NN .py:84 : 102
149
+ examples/ perovskite_solar_cells / psc_nn .py:79 : 97
150
150
-- 8 < --
151
151
```
152
152
153
153
### 3.7 模型训练与评估
154
154
155
155
在训练过程中,我们使用上述封装的函数来创建数据字典、约束、评估器和优化器:
156
156
157
- ``` py linenums="242 " title="examples/ML_Pipeline/NN .py"
157
+ ``` py linenums="230 " title="examples/perovskite_solar_cells/psc_nn .py"
158
158
-- 8 < --
159
- examples/ ML_Pipeline / NN .py:242 : 296
159
+ examples/ perovskite_solar_cells / psc_nn .py:230 : 280
160
160
-- 8 < --
161
161
```
162
162
163
163
## 4. 完整代码
164
164
165
- ``` py linenums="1" title="examples/ML_Pipeline/NN .py"
165
+ ``` py linenums="1" title="examples/perovskite_solar_cells/psc_nn .py"
166
166
-- 8 < --
167
- examples/ ML_Pipeline / NN .py
167
+ examples/ perovskite_solar_cells / psc_nn .py
168
168
-- 8 < --
169
169
```
170
170
0 commit comments