mindscience.models.neural_operator.FFNOBlocks
- class mindscience.models.neural_operator.FFNOBlocks(in_channels, out_channels, n_modes, resolutions, factor=1, n_ff_layers=2, ff_weight_norm=False, layer_norm=True, dropout=0.0, r_padding=0, use_fork=False, forecast_ff=None, backcast_ff=None, fourier_weight=None, dft_compute_dtype=mstype.float32, ffno_compute_dtype=mstype.float32)[源代码]
FFNOBlock,通常伴随一个提升层和一个投影层,是因子化傅里叶神经算子的一部分。它包含一个因子化傅里叶层。详情请参阅 A. Tran, A. Mathews, et. al: FACTORIZED FOURIER NEURAL OPERATORS。
- 参数:
in_channels (int) - 输入空间的通道数。
out_channels (int) - 输出空间的通道数。
n_modes (Union[int, list(int)]) - 傅里叶层线性变换后保留的模式数。
resolutions (Union[int, list(int)]) - 输入张量的分辨率。
factor (int, 可选) - 前馈神经网络隐藏层中的神经元数。默认值:
1。n_ff_layers (int, 可选) - 前馈神经网络中的层数(隐藏层)。默认值:
2。ff_weight_norm (bool, 可选) - 是否在前馈中进行权重归一化。用作保留功能接口,前馈中不支持权重归一化。默认值:
False。layer_norm (bool, 可选) - 是否在前馈中进行层归一化。默认值:
True。dropout (float, 可选) - 应用 dropout 正则化时被丢弃的百分比值。默认值:
0.0。r_padding (int, 可选) - 在某个维度上对张量右侧进行填充的数字。如果输入不是周期性的,则填充域。默认值:
0。use_fork (bool, 可选) - 是否执行预报。默认值:
False。forecast_ff (Feedforward, 可选) - 生成"回波"输出的前馈网络。默认值:
None。backcast_ff (Feedforward, 可选) - 生成"预报"输出的前馈网络。默认值:
None。fourier_weight (ParameterTuple[Parmemter], 可选) - 在频域中变换数据的傅里叶权重,包含一个长度为 2N 的 Parmemter 参数元组。
偶数索引(0, 2, 4, …)表示复数参数的实部。
奇数索引(1, 3, 5, …)表示复数参数的虚部。
默认值:
None,表示未提供数据。dft_compute_dtype (dtype.Number, 可选) - SpectralConv 中 DFT 的计算类型。默认值:
mstype.float32。ffno_compute_dtype (dtype.Number, 可选) - ffno 跳跃 MLP 的计算类型。可选择
mstype.float32或mstype.float16。GPU 后端推荐使用mstype.float32,Ascend 后端推荐使用mstype.float16。默认值:mstype.float32。
- 输入:
x (Tensor) - 形状为 \((batch\_size, in\_channels, resolution)\) 的张量。
- 输出:
output (Tensor) - 形状为 \((batch\_size, out\_channels, resolution)\) 的张量。
- 异常:
ValueError - 如果 ff_weight_norm 不是
False。
样例:
>>> import numpy as np >>> from mindspore import Tensor >>> import mindspore.common.dtype as mstype >>> from mindscience.models.neural_operator.ffno import FFNOBlocks >>> data = Tensor(np.ones([2, 128, 128, 2]), mstype.float32) >>> net = FFNOBlocks(in_channels=2, out_channels=2, n_modes=[20, 20], resolutions=[128, 128]) >>> out0, out1 = net(data) >>> print(data.shape, out0.shape, out1.shape) (2, 128, 128, 2) (2, 128, 128, 2) (2, 128, 128, 2)