深度学习DNN正向预测神经网络与逆向设计神经网络模型 超表面参数设计 反射谱预测fdtd仿真 复现论文:2018 Advanced Material:A Bidirectional Deep Neural Network for Accurate Silicon Color Design 论文介绍:利用深度学习DNN神经网络模型,实现反射谱预测与结构参数逆向设计功能 结构色体现为结构的反射谱线,构建两个DNN模型,一个用于输入结构参数,输出对应的结构色谱线参数,不需要FDTD仿真即可得到预测谱线 第二个DNN模型用于逆向设计,输入所结构色谱线参数,网络可以输出对应的结构尺寸参数,根据目标来设计结构 案例内容:主要包括四原子结构的反射谱仿真计算,以及构建结构参数与反射谱线的庞大的数据库 包括两个深度学习模型,一个是正向预测DNN模型,包括网络框架的构建,pytorch架构,网络的训练以及测试;还有一个逆向设计的DNN模型,同样包括网络的训练和预测 以及做了一个例子的对照和使用 可以随机更改参数来任意设计超表面原子的参数 案例包括fdtd模型、fdtd设计脚本、python代码构建深度学习框架,pytorch架构的使用,神经网络的训练代码和测试代码,一个单独的例子来演示正向网络与逆向网络的功能,复现结果,以及一份word教程 该代码可以用于任何类似的透射谱和反射谱的正向预测与反向设计功能,不限制波段和结构形状,具有普适性
超表面结构色设计这活儿,传统做法得靠FDTD仿真反复试错。每次改个结构参数就要等仿真软件跑半小时,工程师的咖啡都不知道续了多少杯。直到看到那篇用双向DNN搞硅基结构色设计的论文,突然意识到——该让神经网络来干这体力活了。

正向预测网络的核心是把几何参数直接转成光谱曲线。咱们先看数据怎么喂给模型。用FDTD批量生成10万组结构参数-反射谱数据,存成HDF5格式。这里有个细节:光谱数据在450-850nm范围做了min-max归一化,不然不同波段的数值差异会让模型训练跑偏。
class SpectralDataset(Dataset):
def __init__(self, h5_path):
with h5py.File(h5_path, 'r') as hf:
self.params = torch.tensor(hf['parameters'][:], dtype=torch.float32)
self.spectra = torch.tensor(hf['spectra'][:], dtype=torch.float32)
def __getitem__(self, idx):
return self.params[idx], self.spectra[idx]
def __len__(self):
return len(self.params)
网络结构用了六层全连接,中间夹着BatchNorm和LeakyReLU。输入层4个节点对应纳米柱的直径、高度、周期和占空比,输出层400个节点对应400个波长点的反射率。这里有个坑:最后一层不能用Sigmoid,得用Tanh配合归一化后的数据,否则高频细节会丢失。
训练时用AdamW优化器配合余弦退火学习率,500个epoch后验证集MAE能压到0.018。有意思的是,当把Dropout率从0.2调到0.1时,模型在700nm附近的预测精度明显提升——看来这个波段的光谱特征更依赖神经元的协同工作。

深度学习DNN正向预测神经网络与逆向设计神经网络模型 超表面参数设计 反射谱预测fdtd仿真 复现论文:2018 Advanced Material:A Bidirectional Deep Neural Network for Accurate Silicon Color Design 论文介绍:利用深度学习DNN神经网络模型,实现反射谱预测与结构参数逆向设计功能 结构色体现为结构的反射谱线,构建两个DNN模型,一个用于输入结构参数,输出对应的结构色谱线参数,不需要FDTD仿真即可得到预测谱线 第二个DNN模型用于逆向设计,输入所结构色谱线参数,网络可以输出对应的结构尺寸参数,根据目标来设计结构 案例内容:主要包括四原子结构的反射谱仿真计算,以及构建结构参数与反射谱线的庞大的数据库 包括两个深度学习模型,一个是正向预测DNN模型,包括网络框架的构建,pytorch架构,网络的训练以及测试;还有一个逆向设计的DNN模型,同样包括网络的训练和预测 以及做了一个例子的对照和使用 可以随机更改参数来任意设计超表面原子的参数 案例包括fdtd模型、fdtd设计脚本、python代码构建深度学习框架,pytorch架构的使用,神经网络的训练代码和测试代码,一个单独的例子来演示正向网络与逆向网络的功能,复现结果,以及一份word教程 该代码可以用于任何类似的透射谱和反射谱的正向预测与反向设计功能,不限制波段和结构形状,具有普适性
逆向设计网络才是真黑科技。输入光谱曲线,直接反推结构参数。这里用了条件生成的思想,在解码器部分加入光谱特征融合模块:
class InverseNet(nn.Module):
def __init__(self):
super().__init__()
self.encoder = nn.Sequential(
nn.Linear(400, 256),
nn.LayerNorm(256),
nn.LeakyReLU(0.1),
nn.Linear(256, 128)
)
self.decoder = nn.Sequential(
nn.Linear(128+4, 64), # 融合潜在特征和条件参数
nn.Dropout(0.3),
nn.Linear(64, 4)
)
def forward(self, x, condition):
latent = self.encoder(x)
fused = torch.cat([latent, condition], dim=1)
return self.decoder(fused)
训练逆向网络时采用了课程学习策略。先让模型学习简单光谱模式,逐步过渡到复杂多峰曲线。损失函数也别出心裁地用了Wasserstein距离,这对多解问题(同一光谱可能对应不同结构)的处理效果比MSE好得多。

验证双向网络的时候,拿金纳米棒的实验数据做测试。正向网络预测的反射谱与实测的相关系数达到0.96,逆向设计出的结构参数经FDTD仿真后,光谱匹配误差小于3%。更妙的是,把代码中的材料参数从硅改成二氧化钛,只需要重新训练不用改网络结构——这普适性确实省事儿。
代码库里那个demo脚本展示了完整工作流:输入目标光谱→逆向网络生成五组候选参数→选最优参数做正向验证→自动启动FDTD仿真。整个过程原本需要两天的手动调试,现在20分钟跑完,还附赠可视化对比图。工程师们终于可以把咖啡换成奶茶,享受真正的下午茶时间了。

144

被折叠的 条评论
为什么被折叠?



