mindspore打卡第幾天 DDPM 之Unet 網絡解析markdown版本

mindspore打卡第幾天 DDPM 之Unet 網絡解析markdown版本

A:
為啥DDPM的unet網絡的下采樣這部分的channel是從20 32 64 128這樣上升的?從U形結構看不應該是下降的
{Block1 --> block2 --> Res(attn)-- >dowmsample}×3

B:
他是在weight和hight上是下降的,通道數是上升
在上采樣部分反過來,weight和hight變大,通道數最后回到3

條件U-Net

我們已經定義了所有的構建塊(位置嵌入、ResNet/ConvNeXT塊、Attention和組歸一化),現在需要定義整個神經網絡了。請記住,網絡 ? θ ( x t , t ) \mathbf{\epsilon}_\theta(\mathbf{x}_t, t) ?θ?(xt?,t) 的工作是接收一批噪聲圖像+噪聲水平,并輸出添加到輸入中的噪聲。

更具體的:
網絡獲取了一批(batch_size, num_channels, height, width)形狀的噪聲圖像和一批(batch_size, 1)形狀的噪音水平作為輸入,并返回(batch_size, num_channels, height, width)形狀的張量。

網絡構建過程如下:

  • 首先,將卷積層應用于噪聲圖像批上,并計算噪聲水平的位置

  • 接下來,應用一系列下采樣級。每個下采樣階段由2個ResNet/ConvNeXT塊 + groupnorm + attention + 殘差連接 + 一個下采樣操作組成

  • 在網絡的中間,再次應用ResNet或ConvNeXT塊,并與attention交織

  • 接下來,應用一系列上采樣級。每個上采樣級由2個ResNet/ConvNeXT塊+ groupnorm + attention + 殘差連接 + 一個上采樣操作組成

  • 最后,應用ResNet/ConvNeXT塊,然后應用卷積層

最終,神經網絡將層堆疊起來,就像它們是樂高積木一樣(但重要的是了解它們是如何工作的)。

class Unet(nn.Cell):def __init__(self,dim,init_dim=None,out_dim=None,dim_mults=(1, 2, 4, 8),channels=3,with_time_emb=True,convnext_mult=2,):super().__init__()self.channels = channelsinit_dim = default(init_dim, dim // 3 * 2)self.init_conv = nn.Conv2d(channels, init_dim, 7, padding=3, pad_mode="pad", has_bias=True)dims = [init_dim, *map(lambda m: dim * m, dim_mults)]in_out = list(zip(dims[:-1], dims[1:]))block_klass = partial(ConvNextBlock, mult=convnext_mult)if with_time_emb:time_dim = dim * 4self.time_mlp = nn.SequentialCell(SinusoidalPositionEmbeddings(dim),nn.Dense(dim, time_dim),nn.GELU(),nn.Dense(time_dim, time_dim),)else:time_dim = Noneself.time_mlp = Noneself.downs = nn.CellList([])self.ups = nn.CellList([])num_resolutions = len(in_out)for ind, (dim_in, dim_out) in enumerate(in_out):is_last = ind >= (num_resolutions - 1)self.downs.append(nn.CellList([block_klass(dim_in, dim_out, time_emb_dim=time_dim),block_klass(dim_out, dim_out, time_emb_dim=time_dim),Residual(PreNorm(dim_out, LinearAttention(dim_out))),Downsample(dim_out) if not is_last else nn.Identity(),]))mid_dim = dims[-1]self.mid_block1 = block_klass(mid_dim, mid_dim, time_emb_dim=time_dim)self.mid_attn = Residual(PreNorm(mid_dim, Attention(mid_dim)))self.mid_block2 = block_klass(mid_dim, mid_dim, time_emb_dim=time_dim)for ind, (dim_in, dim_out) in enumerate(reversed(in_out[1:])):is_last = ind >= (num_resolutions - 1)self.ups.append(nn.CellList([block_klass(dim_out * 2, dim_in, time_emb_dim=time_dim),block_klass(dim_in, dim_in, time_emb_dim=time_dim),Residual(PreNorm(dim_in, LinearAttention(dim_in))),Upsample(dim_in) if not is_last else nn.Identity(),]))out_dim = default(out_dim, channels)self.final_conv = nn.SequentialCell(block_klass(dim, dim), nn.Conv2d(dim, out_dim, 1))def construct(self, x, time):x = self.init_conv(x)t = self.time_mlp(time) if exists(self.time_mlp) else Noneh = []for block1, block2, attn, downsample in self.downs:x = block1(x, t)x = block2(x, t)x = attn(x)h.append(x)x = downsample(x)x = self.mid_block1(x, t)x = self.mid_attn(x)x = self.mid_block2(x, t)len_h = len(h) - 1for block1, block2, attn, upsample in self.ups:x = ops.concat((x, h[len_h]), 1)len_h -= 1x = block1(x, t)x = block2(x, t)x = attn(x)x = upsample(x)return self.final_conv(x)
import mindspore as ms
from mindspore.common.initializer import Normal# 參數定義
image_side_length = 32  # 圖像的寬和高的像素數
channels = 3  # 圖像通道數,這里假設處理的是RGB圖像
batch_size = 2  # 批次大小# 定義 Unet模型
# 注意:此處的dim應該根據模型設計具體指定,但基于您的代碼,我們保持原樣
unet_model = Unet(dim=image_side_length, channels=channels, dim_mults=(1, 2, 4,))# 構建輸入數據
x = ms.Tensor(shape=(batch_size, channels, image_side_length, image_side_length), dtype=ms.float32, init=Normal())
x.shape  # 顯示數據形狀
print(x)  # 打印數據(顯示初始化后的隨機值)
[[[[ 1.22990236e-02  9.65940859e-03 -5.95777121e-04 ... -1.09354462e-022.30002552e-02 -5.25823655e-03][ 1.35805225e-02  1.16471937e-02 -1.20973922e-02 ... -1.13204606e-02-1.91520341e-02 -1.09745166e-03][-4.65569133e-03  1.33861918e-02 -1.60518996e-02 ...  4.18792450e-049.22567211e-03  4.44417645e-04]...[ 3.40697076e-03  4.53335233e-03  5.73999388e-03 ...  4.67619160e-03-8.16432573e-03 -1.39179081e-02][-9.07978602e-03 -6.43689744e-03  1.32928183e-02 ...  4.21820907e-03-1.05559649e-02  8.33686162e-03][ 2.96656298e-03 -7.44550209e-03  5.52403228e-03 ... -2.09826510e-032.17068940e-02  2.28530783e-02]][[-2.34551495e-03  7.68061494e-03  8.63175746e-03 ... -5.62175177e-03-9.85390134e-03 -4.08322597e-03][ 1.30044697e-02 -9.87336412e-03  2.55680992e-03 ...  1.21581517e-021.10829184e-02 -1.09381862e-02][-1.09032113e-02  1.25320591e-02 -9.15124733e-03 ... -8.42134352e-04-3.48115107e-03 -8.12307373e-03]...[-1.22983279e-02  2.11556954e-03 -1.63072231e-03 ... -8.83890502e-032.00234205e-02 -2.91514886e-03][-4.95374482e-03 -1.51413877e-03  6.57585217e-03 ...  1.93616766e-02-3.65696964e-03 -1.76955778e-02][ 8.47856048e-03  9.17020999e-03 -5.66793000e-03 ... -2.92802905e-03-5.98460436e-03  8.32138583e-03]][[ 1.00378189e-02 -2.43024575e-03  2.11097375e-02 ... -6.47504721e-03-1.47426147e-02  7.38033140e-03][-3.09416349e-03 -3.46184568e-03 -7.74018466e-03 ...  1.19950040e-033.14799254e-04 -7.95779750e-03][ 3.98837449e-03  2.33123749e-02  1.63442008e-02 ...  1.05365906e-02-1.44729228e-03  1.90633966e-03]...[-1.76522471e-02  9.42215510e-03 -9.92319733e-03 ... -8.83952528e-03-1.18930812e-03 -8.53374321e-03][ 2.51283534e-02 -1.38457380e-02  1.32035371e-02 ...  1.66724548e-02-9.26751085e-03  1.42328264e-02][-3.69384699e-03  6.09130273e-03 -2.94976344e-04 ...  7.72336172e-03-3.75742209e-03 -3.17590404e-03]]][[[-2.92081665e-03 -1.39991604e-02 -8.93703103e-03 ...  1.51352473e-023.90937366e-03  2.66693830e-02][-2.27847677e-02  3.63694108e-03  2.70780316e-03 ... -8.13330431e-03-4.17956570e-03  1.22072157e-02][-1.24624427e-02  4.75015305e-03  2.68556597e-03 ...  6.48784591e-03-6.09957753e-03  4.85362951e-03]...[-3.67846363e-03 -9.81856976e-03 -7.40657933e-03 ...  1.95454084e-031.80558003e-02  4.30267537e-03][-2.47061905e-02  1.53471017e-03 -2.55961739e-03 ... -6.16029697e-03-1.19128199e-02  7.23672146e-03][-9.77169070e-03 -5.93968621e-03 -1.16010886e-02 ...  1.13449963e-027.74116023e-03 -8.25872459e-03]][[ 2.42574494e-02 -1.59016773e-02  4.60586976e-03 ... -1.27300173e-02-2.08083801e-02  1.20891845e-02][ 4.98928130e-03  1.58587005e-02 -1.17553072e-02 ... -4.57813032e-032.66204093e-04 -1.80527139e-02][ 9.97055881e-03  2.07035127e-03 -7.31401029e-04 ...  1.80852767e-02-2.09929375e-03  4.49541025e-04]...[-8.71989876e-04  7.75372284e-03  3.14102072e-05 ...  6.37980178e-04-1.68553423e-02 -4.13572555e-03][ 6.12246012e-03 -1.88669516e-03  1.50548946e-02 ...  9.18534491e-031.46157937e-02  5.96544426e-03][-5.24167530e-03  2.64895801e-03  7.25612324e-03 ... -5.48065547e-03-2.98001780e-03 -7.99621455e-03]][[ 1.18518099e-02  1.00414380e-02 -3.00463289e-03 ... -3.48429219e-031.21912286e-02 -8.21612682e-03][ 9.25556850e-03 -1.57560236e-04  7.71128759e-03 ...  3.91136715e-031.56383701e-02  8.09505815e-04][ 4.79864981e-03  1.88933630e-02  1.73798949e-02 ...  5.97322173e-034.30198200e-03  1.52684944e-02]...[-9.37487371e-03  5.54391975e-03  4.64118691e-03 ...  6.41342625e-031.36971334e-03 -1.25444317e-02][-4.26448090e-03  7.79700419e-03  2.39845295e-03 ... -1.18866842e-023.74738523e-03  1.07039241e-02][-1.02939839e-02  7.36899953e-03 -2.00587343e-02 ... -1.10042403e-02-1.42604960e-02 -1.37462756e-02]]]]
x.shape  # 顯示數據形狀
(2, 3, 32, 32)
dim=image_side_length
channels=channels
dim_mults=(1, 2, 4,)

init_dim=None
out_dim=None
# dim_mults=(1, 2, 4, 8)
channels=3
with_time_emb=True
convnext_mult=2
init_dim = default(init_dim, dim // 3 * 2)
dim,init_dim
(32, 20)
channels
3
init_conv = nn.Conv2d(channels, init_dim, 7, padding=3, pad_mode="pad", has_bias=True)
init_conv 
Conv2d<input_channels=3, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2d30>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefedb2be0>, format=NCHW>
dim, dim_mults,init_dim
(32, (1, 2, 4), 20)
(lambda m: dim * m, dim_mults)
(<function __main__.<lambda>(m)>, (1, 2, 4))
dims = [init_dim, *map(lambda m: dim * m, dim_mults)]
dims
[20, 32, 64, 128]
zip(dims[:-1], dims[1:])
<zip at 0xfffefc367b80>
dims[:-1], dims[1:]
([20, 32, 64], [32, 64, 128])
in_out = list(zip(dims[:-1], dims[1:]))
in_out
[(20, 32), (32, 64), (64, 128)]
ConvNextBlock,convnext_mult
(__main__.ConvNextBlock, 2)
block_klass = partial(ConvNextBlock, mult=convnext_mult) ##傳入ConvNextBlock的第一個參數mult=convnext_mult
block_klass
functools.partial(<class '__main__.ConvNextBlock'>, mult=2)
 with_time_emb
True

time_dim = dim * 4
time_dim,dim
(128, 32)
time_mlp = nn.SequentialCell(SinusoidalPositionEmbeddings(dim),nn.Dense(dim, time_dim),nn.GELU(),nn.Dense(time_dim, time_dim),)
time_mlp
SequentialCell<(0): SinusoidalPositionEmbeddings<>(1): Dense<input_channels=32, output_channels=128, has_bias=True>(2): GELU<>(3): Dense<input_channels=128, output_channels=128, has_bias=True>>
downs = nn.CellList([])
ups = nn.CellList([])
ups
CellList<>
num_resolutions = len(in_out)
num_resolutions
3
for ind, (dim_in, dim_out) in enumerate(in_out):is_last = ind >= (num_resolutions - 1)print(ind,":",is_last)
0 : False
1 : False
2 : True
dim_in, dim_out, time_dim  ###把每個時間步編碼為128維度
(64, 128, 128)
in_out
[(20, 32), (32, 64), (64, 128)]
for ind, (dim_in, dim_out) in enumerate(in_out):print(dim_in, dim_out)is_last = ind >= (num_resolutions - 1)downs.append(nn.CellList([block_klass(dim_in, dim_out, time_emb_dim=time_dim),block_klass(dim_out, dim_out, time_emb_dim=time_dim),Residual(PreNorm(dim_out, LinearAttention(dim_out))),Downsample(dim_out) if not is_last else nn.Identity(),]))
20 32
32 64
64 128
downs
CellList<(0): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=20, has_bias=True>>(ds_conv): Conv2d<input_channels=20, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=20, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c130>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=20>(1): Conv2d<input_channels=20, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbc070>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354a90>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=20, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3d7cd0>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3c17f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc3062b0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c190>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d90>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d00>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc306a60>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=32>>>(3): Conv2d<input_channels=32, output_channels=32, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf1f0>, bias_init=None, format=NCHW>>(1): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306fd0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf580>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf190>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=32, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf670>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf940>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf910>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf760>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=64, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfa30>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfac0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2cfb80>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=64>>>(3): Conv2d<input_channels=64, output_channels=64, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfdc0>, bias_init=None, format=NCHW>>(2): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfe50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cff40>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac130>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=64, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac250>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac1f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac370>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac4c0>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=128, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac6a0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac7c0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2ac820>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=128>>>(3): Identity<>>>
mid_dim = dims[-1]
mid_dim 
128
mid_block1 = block_klass(mid_dim, mid_dim, time_emb_dim=time_dim)
mid_attn = Residual(PreNorm(mid_dim, Attention(mid_dim)))
mid_block2 = block_klass(mid_dim, mid_dim, time_emb_dim=time_dim)
mid_block1
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354b50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17e50>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac36db20>, bias_init=None, format=NCHW>>(res_conv): Identity<>>
mid_attn
Residual<(fn): PreNorm<(fn): Attention<(to_qkv): Conv2d<input_channels=128, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac36d9a0>, bias_init=None, format=NCHW>(to_out): Conv2d<input_channels=128, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac36d880>, bias_init=<mindspore.common.initializer.Uniform object at 0xffffac36d730>, format=NCHW>>(norm): GroupNorm<num_groups=1, num_channels=128>>>
mid_block2 
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30cee0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c850>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c910>, bias_init=None, format=NCHW>>(res_conv): Identity<>>
for ind, (dim_in, dim_out) in enumerate(reversed(in_out[1:])):print(dim_in, dim_out)is_last = ind >= (num_resolutions - 1)print(is_last)
64 128
False
32 64
False
dim_in
32
LinearAttention(dim_in)
LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306eb0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac348c40>, bias_init=<mindspore.common.initializer.Uniform object at 0xffffac2bc4c0>, format=NCHW>(1): LayerNorm<>>>
class LinearAttention(nn.Cell):def __init__(self, dim, heads=4, dim_head=32):super().__init__()self.scale = dim_head ** -0.5self.heads = headshidden_dim = dim_head * headsself.to_qkv = nn.Conv2d(dim, hidden_dim * 3, 1, pad_mode='valid', has_bias=False)self.to_out = nn.SequentialCell(nn.Conv2d(hidden_dim, dim, 1, pad_mode='valid', has_bias=True),LayerNorm(dim))self.map = ops.Map()self.partial = ops.Partial()def construct(self, x):b, _, h, w = x.shapeqkv = self.to_qkv(x).chunk(3, 1)q, k, v = self.map(self.partial(rearrange, self.heads), qkv)q = ops.softmax(q, -2)k = ops.softmax(k, -1)q = q * self.scalev = v / (h * w)# 'b h d n, b h e n -> b h d e'context = ops.bmm(k, v.swapaxes(2, 3))# 'b h d e, b h d n -> b h e n'out = ops.bmm(context.swapaxes(2, 3), q)out = out.reshape((b, -1, h, w))return self.to_out(out)
for ind, (dim_in, dim_out) in enumerate(reversed(in_out[1:])):is_last = ind >= (num_resolutions - 1)ups.append(nn.CellList([block_klass(dim_out * 2, dim_in, time_emb_dim=time_dim),block_klass(dim_in, dim_in, time_emb_dim=time_dim),Residual(PreNorm(dim_in, LinearAttention(dim_in))),Upsample(dim_in) if not is_last else nn.Identity(),]))
ups
CellList<(0): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=256, has_bias=True>>(ds_conv): Conv2d<input_channels=256, output_channels=256, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=256, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2b80>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=256>(1): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee15430>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee15d30>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=256, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb24c0>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbcd00>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbc550>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c4f0>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=64, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354580>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30cc10>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc30c9a0>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=64>>>(3): Conv2dTranspose<input_channels=64, output_channels=64, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30cac0>, bias_init=None, format=NCHW>>(1): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c2e0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c5e0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17f10>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17760>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17a00>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17580>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17dc0>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc3064f0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306b50>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc3065b0>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=32>>>(3): Conv2dTranspose<input_channels=32, output_channels=32, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306f70>, bias_init=None, format=NCHW>>>
out_dim = default(out_dim, channels)out_dim 
3
final_conv = nn.SequentialCell(block_klass(dim, dim), nn.Conv2d(dim, out_dim, 1))
final_conv 
SequentialCell<(0): ConvNextBlock<(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2acb50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17bb0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2100>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(1): Conv2d<input_channels=32, output_channels=3, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2eb0>, bias_init=None, format=NCHW>>
x
time=5
x.shape
(2, 3, 32, 32)
print(x)
[[[[ 1.22990236e-02  9.65940859e-03 -5.95777121e-04 ... -1.09354462e-022.30002552e-02 -5.25823655e-03][ 1.35805225e-02  1.16471937e-02 -1.20973922e-02 ... -1.13204606e-02-1.91520341e-02 -1.09745166e-03][-4.65569133e-03  1.33861918e-02 -1.60518996e-02 ...  4.18792450e-049.22567211e-03  4.44417645e-04]...[ 3.40697076e-03  4.53335233e-03  5.73999388e-03 ...  4.67619160e-03-8.16432573e-03 -1.39179081e-02][-9.07978602e-03 -6.43689744e-03  1.32928183e-02 ...  4.21820907e-03-1.05559649e-02  8.33686162e-03][ 2.96656298e-03 -7.44550209e-03  5.52403228e-03 ... -2.09826510e-032.17068940e-02  2.28530783e-02]][[-2.34551495e-03  7.68061494e-03  8.63175746e-03 ... -5.62175177e-03-9.85390134e-03 -4.08322597e-03][ 1.30044697e-02 -9.87336412e-03  2.55680992e-03 ...  1.21581517e-021.10829184e-02 -1.09381862e-02][-1.09032113e-02  1.25320591e-02 -9.15124733e-03 ... -8.42134352e-04-3.48115107e-03 -8.12307373e-03]...[-1.22983279e-02  2.11556954e-03 -1.63072231e-03 ... -8.83890502e-032.00234205e-02 -2.91514886e-03][-4.95374482e-03 -1.51413877e-03  6.57585217e-03 ...  1.93616766e-02-3.65696964e-03 -1.76955778e-02][ 8.47856048e-03  9.17020999e-03 -5.66793000e-03 ... -2.92802905e-03-5.98460436e-03  8.32138583e-03]][[ 1.00378189e-02 -2.43024575e-03  2.11097375e-02 ... -6.47504721e-03-1.47426147e-02  7.38033140e-03][-3.09416349e-03 -3.46184568e-03 -7.74018466e-03 ...  1.19950040e-033.14799254e-04 -7.95779750e-03][ 3.98837449e-03  2.33123749e-02  1.63442008e-02 ...  1.05365906e-02-1.44729228e-03  1.90633966e-03]...[-1.76522471e-02  9.42215510e-03 -9.92319733e-03 ... -8.83952528e-03-1.18930812e-03 -8.53374321e-03][ 2.51283534e-02 -1.38457380e-02  1.32035371e-02 ...  1.66724548e-02-9.26751085e-03  1.42328264e-02][-3.69384699e-03  6.09130273e-03 -2.94976344e-04 ...  7.72336172e-03-3.75742209e-03 -3.17590404e-03]]][[[-2.92081665e-03 -1.39991604e-02 -8.93703103e-03 ...  1.51352473e-023.90937366e-03  2.66693830e-02][-2.27847677e-02  3.63694108e-03  2.70780316e-03 ... -8.13330431e-03-4.17956570e-03  1.22072157e-02][-1.24624427e-02  4.75015305e-03  2.68556597e-03 ...  6.48784591e-03-6.09957753e-03  4.85362951e-03]...[-3.67846363e-03 -9.81856976e-03 -7.40657933e-03 ...  1.95454084e-031.80558003e-02  4.30267537e-03][-2.47061905e-02  1.53471017e-03 -2.55961739e-03 ... -6.16029697e-03-1.19128199e-02  7.23672146e-03][-9.77169070e-03 -5.93968621e-03 -1.16010886e-02 ...  1.13449963e-027.74116023e-03 -8.25872459e-03]][[ 2.42574494e-02 -1.59016773e-02  4.60586976e-03 ... -1.27300173e-02-2.08083801e-02  1.20891845e-02][ 4.98928130e-03  1.58587005e-02 -1.17553072e-02 ... -4.57813032e-032.66204093e-04 -1.80527139e-02][ 9.97055881e-03  2.07035127e-03 -7.31401029e-04 ...  1.80852767e-02-2.09929375e-03  4.49541025e-04]...[-8.71989876e-04  7.75372284e-03  3.14102072e-05 ...  6.37980178e-04-1.68553423e-02 -4.13572555e-03][ 6.12246012e-03 -1.88669516e-03  1.50548946e-02 ...  9.18534491e-031.46157937e-02  5.96544426e-03][-5.24167530e-03  2.64895801e-03  7.25612324e-03 ... -5.48065547e-03-2.98001780e-03 -7.99621455e-03]][[ 1.18518099e-02  1.00414380e-02 -3.00463289e-03 ... -3.48429219e-031.21912286e-02 -8.21612682e-03][ 9.25556850e-03 -1.57560236e-04  7.71128759e-03 ...  3.91136715e-031.56383701e-02  8.09505815e-04][ 4.79864981e-03  1.88933630e-02  1.73798949e-02 ...  5.97322173e-034.30198200e-03  1.52684944e-02]...[-9.37487371e-03  5.54391975e-03  4.64118691e-03 ...  6.41342625e-031.36971334e-03 -1.25444317e-02][-4.26448090e-03  7.79700419e-03  2.39845295e-03 ... -1.18866842e-023.74738523e-03  1.07039241e-02][-1.02939839e-02  7.36899953e-03 -2.00587343e-02 ... -1.10042403e-02-1.42604960e-02 -1.37462756e-02]]]]
init_conv
Conv2d<input_channels=3, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2d30>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefedb2be0>, format=NCHW>
x = init_conv(x)
print(x)    
[[[[ 0.04106301  0.04308875  0.03753628 ...  0.03978373  0.040203620.03793241][ 0.04131693  0.04225756  0.03624208 ...  0.04158005  0.043847460.0374498 ][ 0.03251923  0.04382189  0.03682814 ...  0.04343156  0.037907280.03667009]...[ 0.03987011  0.04261249  0.03721504 ...  0.03754282  0.035301940.04190454][ 0.03995614  0.04259038  0.04231969 ...  0.03937387  0.038029450.03542861][ 0.03724413  0.03895703  0.03808391 ...  0.04210365  0.038438160.03887339]][[-0.07880677 -0.081793   -0.08021648 ... -0.07915598 -0.08803446-0.07824855][-0.07975532 -0.0827108  -0.08153103 ... -0.08920732 -0.08202183-0.07717112][-0.080375   -0.08304221 -0.07943083 ... -0.08371484 -0.07717931-0.07678773]...[-0.07925861 -0.07035945 -0.07607639 ... -0.08380341 -0.08219168-0.08388805][-0.07702561 -0.07861231 -0.08642116 ... -0.08342467 -0.07647635-0.08471077][-0.08218312 -0.08206419 -0.0820056  ... -0.0710914  -0.08050337-0.08665174]][[-0.05770465 -0.05971097 -0.06042907 ... -0.05981689 -0.05351909-0.06045758][-0.06280089 -0.06072729 -0.06125656 ... -0.06167236 -0.05607811-0.06504007][-0.05974955 -0.06224146 -0.05134789 ... -0.06194806 -0.05703649-0.05661972]...[-0.0587245  -0.06006888 -0.06369887 ... -0.0509633  -0.05987025-0.05689852][-0.05888586 -0.06178844 -0.06245932 ... -0.06076533 -0.05802548-0.06169396][-0.05935856 -0.05726556 -0.05836396 ... -0.06468105 -0.05601557-0.05411654]]...[[-0.06885257 -0.06496602 -0.07227325 ... -0.06768468 -0.07973982-0.06684067][-0.06921483 -0.07310341 -0.07145415 ... -0.07373261 -0.06769554-0.06564213][-0.07235637 -0.08390911 -0.06977317 ... -0.06690352 -0.06286541-0.06959118]...[-0.07000594 -0.06508094 -0.06877656 ... -0.07407243 -0.07690564-0.06396648][-0.07082649 -0.07268029 -0.07315704 ... -0.06758922 -0.06662212-0.06855071][-0.07199463 -0.06999994 -0.07014568 ... -0.06523817 -0.07094447-0.07466151]][[ 0.06986891  0.06941634  0.06439675 ...  0.06187101  0.06754930.07306495][ 0.07319107  0.07266034  0.05997508 ...  0.06689761  0.068151540.0660945 ][ 0.07065641  0.05923657  0.06411441 ...  0.06652149  0.070889530.07194202]...[ 0.06848673  0.07591817  0.0726023  ...  0.06602401  0.068905850.07259338][ 0.07433689  0.06679939  0.06691605 ...  0.0667197   0.071841430.06983658][ 0.06431621  0.07212089  0.06723586 ...  0.06868842  0.071403610.06901537]][[ 0.02097934  0.01210438  0.01431934 ...  0.01505992  0.018522770.01381299][ 0.02296696  0.0177606   0.01976403 ...  0.02147305  0.022102590.02313221][ 0.02124698  0.02709681  0.02910981 ...  0.01016832  0.022126390.01957588]...[ 0.02289374  0.01311012  0.01578637 ...  0.01931083  0.015551860.0208313 ][ 0.01390727  0.02096656  0.01745579 ...  0.01781181  0.022118750.01568411][ 0.02439262  0.01495296  0.01968778 ...  0.02193322  0.017833680.0176824 ]]][[[ 0.04223164  0.03378314  0.03601065 ...  0.03959855  0.034856640.04071919][ 0.0318558   0.05363872  0.03783617 ...  0.04385335  0.04962590.03691863][ 0.03818982  0.03180957  0.04072122 ...  0.03430039  0.033840470.03837577]...[ 0.0398777   0.03721025  0.03533046 ...  0.04020133  0.039280160.04710523][ 0.04118172  0.03496882  0.03100736 ...  0.03642647  0.039140040.0371574 ][ 0.04037436  0.04040184  0.04165599 ...  0.04403537  0.032540440.04335065]][[-0.08552387 -0.07319534 -0.08021338 ... -0.07858572 -0.07166487-0.08406518][-0.07923919 -0.08566054 -0.08015955 ... -0.08471547 -0.0847266-0.08085599][-0.08489675 -0.09258271 -0.08831957 ... -0.09042192 -0.08426952-0.0808774 ]...[-0.08036023 -0.07413588 -0.07989521 ... -0.07935498 -0.08571334-0.08329107][-0.07644836 -0.07608277 -0.08767064 ... -0.08434241 -0.08071237-0.0839122 ][-0.07979399 -0.08087463 -0.08673595 ... -0.08414597 -0.08045428-0.07299927]][[-0.06060546 -0.05453672 -0.06102112 ... -0.05194974 -0.0567053-0.06273571][-0.06276039 -0.05693425 -0.04725159 ... -0.06214722 -0.06443968-0.05762123][-0.05252658 -0.06019294 -0.06137866 ... -0.04910715 -0.06131132-0.06036767]...[-0.06173272 -0.05464447 -0.05099018 ... -0.06136036 -0.06400239-0.06106843][-0.05803053 -0.05994222 -0.06404369 ... -0.04949801 -0.05738675-0.06158596][-0.05899998 -0.06198164 -0.05937162 ... -0.06379396 -0.06430338-0.06287489]]...[[-0.07173873 -0.0707745  -0.06975999 ... -0.07155637 -0.06534318-0.07189398][-0.06730746 -0.07013785 -0.06751848 ... -0.07264671 -0.07705939-0.07342067][-0.07058413 -0.07025788 -0.06871852 ... -0.06887744 -0.06563742-0.07028291]...[-0.07809374 -0.06778216 -0.06392691 ... -0.06867532 -0.07118014-0.07647338][-0.07219965 -0.07040192 -0.0732589  ... -0.07633238 -0.0752567-0.0702922 ][-0.06984755 -0.07723872 -0.06846898 ... -0.06786713 -0.06702175-0.07062964]][[ 0.06747851  0.06883495  0.06797507 ...  0.06853593  0.065758060.06841848][ 0.06514458  0.06994057  0.06866109 ...  0.06339982  0.063094780.06588745][ 0.06701669  0.0691862   0.06725767 ...  0.06696404  0.070454140.07060774]...[ 0.07085218  0.0809648   0.06841429 ...  0.06838602  0.069184880.07014886][ 0.07304276  0.07134987  0.07214254 ...  0.07656243  0.071362260.06578355][ 0.06968872  0.07193028  0.06518821 ...  0.07004035  0.068913510.06959624]][[ 0.02295301  0.01347421  0.02212771 ...  0.02214386  0.013235620.02334489][ 0.01578862  0.01825874  0.01307945 ...  0.0216907   0.027196160.02306023][ 0.01491401  0.01406     0.02918804 ...  0.02165697  0.017336570.01930147]...[ 0.01614039  0.019646    0.02148937 ...  0.00664111  0.018884910.02413018][ 0.01757734  0.01567486  0.01912338 ...  0.02099028  0.017172710.01547725][ 0.01756483  0.020161    0.01650484 ...  0.01933268  0.01673340.01855144]]]]
x.shape
(2, 20, 32, 32)
#unet_model.init_conv(x)  ####調用實例化后類的方法!!!!! 好像是失敗的
import numpy as np
from mindspore import Tensor# 定義時間步的起始值、步數以及步長(默認為1,即每個時間步增加1)
start = 0
num_steps = 10
step = 1# 生成線性遞增的時間步長序列
t = Tensor(np.arange(start, start + num_steps * step, step), dtype=ms.int32)print("線性遞增的時間步長序列:", t)# time_mlp
# SequentialCell<
#   (0): SinusoidalPositionEmbeddings<>
#   (1): Dense<input_channels=32, output_channels=128, has_bias=True>
#   (2): GELU<>
#   (3): Dense<input_channels=128, output_channels=128, has_bias=True>
#   >
time_mlp(t) ###這里正確了
線性遞增的時間步長序列: [0 1 2 3 4 5 6 7 8 9]Tensor(shape=[10, 128], dtype=Float32, value=
[[ 1.89717814e-01,  1.14008449e-02,  3.33061777e-02 ...  1.43985003e-01,  3.92933972e-02, -1.06829256e-02],[ 1.93240538e-01,  1.78442001e-02,  6.77158684e-02 ...  1.36301309e-01,  7.64560923e-02, -1.50307640e-02],[ 1.83035284e-01,  2.44393535e-02,  8.70461762e-02 ...  1.38745904e-01,  1.33171901e-01, -3.85175534e-02],...[ 1.28773689e-01,  1.91335917e-01, -9.48226005e-02 ...  8.54851380e-02,  1.52098373e-01,  2.03581899e-02],[ 1.22549936e-01,  1.48201510e-01, -8.17623138e-02 ...  4.44053262e-02,  9.75183249e-02,  3.97774130e-02],[ 1.07752994e-01,  1.08763084e-01, -7.05250949e-02 ...  4.34711799e-02,  6.16942756e-02,  1.67786255e-02]])
import numpy as np
from mindspore import Tensor# 定義時間步的起始值、步數以及步長(默認為1,即每個時間步增加1)
start = 0
num_steps = 5
step = 1# 生成線性遞增的時間步長序列
t = Tensor(np.arange(start, start + num_steps * step, step), dtype=ms.int32)print("線性遞增的時間步長序列:", t)# time_mlp
# SequentialCell<
#   (0): SinusoidalPositionEmbeddings<>
#   (1): Dense<input_channels=32, output_channels=128, has_bias=True>
#   (2): GELU<>
#   (3): Dense<input_channels=128, output_channels=128, has_bias=True>
#   >
time_mlp(t) ###這里正確了
線性遞增的時間步長序列: [0 1 2 3 4]Tensor(shape=[5, 128], dtype=Float32, value=
[[ 1.89717814e-01,  1.14008449e-02,  3.33061777e-02 ...  1.43985003e-01,  3.92933972e-02, -1.06829256e-02],[ 1.93240538e-01,  1.78442001e-02,  6.77158684e-02 ...  1.36301309e-01,  7.64560923e-02, -1.50307640e-02],[ 1.83035284e-01,  2.44393535e-02,  8.70461762e-02 ...  1.38745904e-01,  1.33171901e-01, -3.85175534e-02],[ 1.60673216e-01,  5.66724911e-02,  6.34887069e-02 ...  1.58708930e-01,  1.91956162e-01, -7.78784081e-02],[ 1.33557051e-01,  1.20526701e-01,  5.27272746e-03 ...  1.78237736e-01,  2.34055102e-01, -9.55123529e-02]])
t.shape
(5,)

看起來你希望構造一個形狀為(5,)的張量t,這通常表示一個包含5個元素的一維向量。在Python中使用MindSpore庫,你可以很容易地創建這樣一個張量。這里有幾個創建此形狀張量的例子,包括初始化為特定值或隨機值:

初始化為零

import mindspore as ms# 創建一個全零的張量,形狀為(5,)
t = ms.Tensor.zeros(5, dtype=ms.float32)
print(t.shape)  # 輸出: (5,)

初始化為一

t = ms.Tensor.ones(5, dtype=ms.float32)
print(t.shape)  # 輸出: (5,)

初始化為單位序列(例如,[0, 1, 2, 3, 4])

import numpy as npt = ms.Tensor(np.arange(5), dtype=ms.float32)
print(t.shape)  # 輸出: (5,)

初始化為隨機值

t = ms.Tensor(np.random.rand(5), dtype=ms.float32)
print(t.shape)  # 輸出: (5,)

使用特定值填充

value = 3.14  # 例如,使用π作為填充值
t = ms.Tensor(np.full(5, value), dtype=ms.float32)
print(t.shape)  # 輸出: (5,)

以上任一代碼塊都可以創建一個形狀為(5,)的張量t,根據你的具體需求選擇合適的初始化方式。

h = []
downs # 3#套有3個cellist元素的一個celllist
CellList<(0): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=20, has_bias=True>>(ds_conv): Conv2d<input_channels=20, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=20, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c130>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=20>(1): Conv2d<input_channels=20, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbc070>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354a90>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=20, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3d7cd0>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3c17f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc3062b0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c190>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d90>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d00>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc306a60>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=32>>>(3): Conv2d<input_channels=32, output_channels=32, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf1f0>, bias_init=None, format=NCHW>>(1): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306fd0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf580>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf190>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=32, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf670>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf940>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf910>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf760>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=64, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfa30>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfac0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2cfb80>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=64>>>(3): Conv2d<input_channels=64, output_channels=64, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfdc0>, bias_init=None, format=NCHW>>(2): CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfe50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cff40>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac130>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=64, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac250>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac1f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac370>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac4c0>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=128, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac6a0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac7c0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2ac820>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=128>>>(3): Identity<>>>
for downsample in downs:print(downsample)
CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=20, has_bias=True>>(ds_conv): Conv2d<input_channels=20, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=20, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c130>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=20>(1): Conv2d<input_channels=20, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbc070>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354a90>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=20, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3d7cd0>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3c17f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc3062b0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c190>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d90>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d00>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc306a60>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=32>>>(3): Conv2d<input_channels=32, output_channels=32, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf1f0>, bias_init=None, format=NCHW>>
CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306fd0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf580>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf190>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=32, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf670>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf940>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf910>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf760>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=64, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfa30>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfac0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2cfb80>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=64>>>(3): Conv2d<input_channels=64, output_channels=64, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfdc0>, bias_init=None, format=NCHW>>
CellList<(0): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfe50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cff40>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac130>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=64, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac250>, bias_init=None, format=NCHW>>(1): ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac1f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac370>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac4c0>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(2): Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=128, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac6a0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac7c0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2ac820>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=128>>>(3): Identity<>>
for block1, block2, attn, downsample in downs:print("aaaaaaaaaas11BL1")print(block1)print("aaaaaaaaaasBL2")print( block2)print("aaaaaaaaaasAT 殘差 attn")print(attn)print("aaaaaaaaaasAT 下采樣")print( downsample)
aaaaaaaaaas11BL1
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=20, has_bias=True>>(ds_conv): Conv2d<input_channels=20, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=20, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c130>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=20>(1): Conv2d<input_channels=20, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbc070>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354a90>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=20, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3d7cd0>, bias_init=None, format=NCHW>>
aaaaaaaaaasBL2
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3c17f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc3062b0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c190>, bias_init=None, format=NCHW>>(res_conv): Identity<>>
aaaaaaaaaasAT 殘差 attn
Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d90>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d00>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc306a60>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=32>>>
aaaaaaaaaasAT 下采樣
Conv2d<input_channels=32, output_channels=32, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf1f0>, bias_init=None, format=NCHW>
aaaaaaaaaas11BL1
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306fd0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf580>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf190>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=32, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf670>, bias_init=None, format=NCHW>>
aaaaaaaaaasBL2
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf940>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf910>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf760>, bias_init=None, format=NCHW>>(res_conv): Identity<>>
aaaaaaaaaasAT 殘差 attn
Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=64, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfa30>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfac0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2cfb80>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=64>>>
aaaaaaaaaasAT 下采樣
Conv2d<input_channels=64, output_channels=64, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfdc0>, bias_init=None, format=NCHW>
aaaaaaaaaas11BL1
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfe50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cff40>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac130>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=64, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac250>, bias_init=None, format=NCHW>>
aaaaaaaaaasBL2
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac1f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac370>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac4c0>, bias_init=None, format=NCHW>>(res_conv): Identity<>>
aaaaaaaaaasAT 殘差 attn
Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=128, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac6a0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac7c0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2ac820>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=128>>>
aaaaaaaaaasAT 下采樣
Identity<>

dim_in, dim_out,dim
(32, 64, 32)

因為循環這個[(20, 32), (32, 64), (64, 128)] 所以down 有3個元素 nn.cell

convnext_mult
2
#dims = [init_dim, *map(lambda m: dim * m, dim_mults)]
dims
[20, 32, 64, 128]
i=0
for block1, block2, attn, downsample in downs:i=i+1print("--------",i)print("BL1塊1:",block1,"BL2塊2:", block2, "ATTT殘差注意力:",attn, "DOWN下采樣:",downsample)#                 block_klass(dim_in, dim_out, time_emb_dim=time_dim),  #time_dim=128 dim=128
#                 block_klass(dim_out, dim_out, time_emb_dim=time_dim),
#                 Residual(PreNorm(dim_out, LinearAttention(dim_out))),
#                 Downsample(dim_out) if not is_last else nn.Identity(),    block_klass = partial(ConvNextBlock, mult=convnext_mult) ##傳入ConvNextBlock的第一個參數mult=convnext_mult
block_klass# class ConvNextBlock(nn.Cell):
#     def __init__(self, dim, dim_out, *, time_emb_dim=None, mult=2, norm=True):
#         super().__init__()
#         self.mlp = (
#             nn.SequentialCell(nn.GELU(), nn.Dense(time_emb_dim, dim))
#             if exists(time_emb_dim)
#             else None
#         )#         self.ds_conv = nn.Conv2d(dim, dim, 7, padding=3, group=dim, pad_mode="pad")
#         self.net = nn.SequentialCell(
#             nn.GroupNorm(1, dim) if norm else nn.Identity(),
#             nn.Conv2d(dim, dim_out * mult, 3, padding=1, pad_mode="pad"),
#             nn.GELU(),
#             nn.GroupNorm(1, dim_out * mult),
#             nn.Conv2d(dim_out * mult, dim_out, 3, padding=1, pad_mode="pad"),
#         )#         self.res_conv = nn.Conv2d(dim, dim_out, 1) if dim != dim_out else nn.Identity()#     def construct(self, x, time_emb=None):
#         h = self.ds_conv(x)
#         if exists(self.mlp) and exists(time_emb):
#             assert exists(time_emb), "time embedding must be passed in"
#             condition = self.mlp(time_emb)
#             condition = condition.expand_dims(-1).expand_dims(-1)
#             h = h + condition#         h = self.net(h)
#         return h + self.res_conv(x)### 第一層BL1
#input_channels=20, output_channels=32  (20,32)### 第一層BL2
#Conv2d<input_channels=64【32*2】, output_channels=32, (res_conv): Identity<>  (32,32)### 第一層Res
#Conv2d<input_channels=128, output_channels=32,  (32,32)### 第一層down
#Conv2d<input_channels=32, output_channels=32  (32,32)### 第二層BL1
#Conv2d<input_channels=32, output_channels=64  (32,64)### 第二層BL2
# Conv2d<input_channels=128【64*2】, output_channels=64,  (res_conv): Identity<>  (64,64)### 第二層Res
#Conv2d<input_channels=128, output_channels=64 (64,64)### 第二層down
# Conv2d<input_channels=64, output_channels=64  (64,64)### 第三層BL1
#Conv2d<input_channels=64, output_channels=128 (64,128)### 第三層BL2
#Conv2d<input_channels=256【128*2】, output_channels=128, (res_conv): Identity<>  (128,128)### 第三層Res
#Conv2d<input_channels=128, output_channels=128, (res_conv): Identity<> (128,128)### 第三層down
#  Identity<> (128,128)
-------- 1
BL1塊1: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=20, has_bias=True>>(ds_conv): Conv2d<input_channels=20, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=20, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c130>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=20>(1): Conv2d<input_channels=20, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbc070>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354a90>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=20, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3d7cd0>, bias_init=None, format=NCHW>> BL2塊2: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffad3c17f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc3062b0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c190>, bias_init=None, format=NCHW>>(res_conv): Identity<>> ATTT殘差注意力: Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d90>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306d00>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc306a60>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=32>>> DOWN下采樣: Conv2d<input_channels=32, output_channels=32, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf1f0>, bias_init=None, format=NCHW>
-------- 2
BL1塊1: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306fd0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf580>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf190>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=32, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf670>, bias_init=None, format=NCHW>> BL2塊2: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf940>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf910>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cf760>, bias_init=None, format=NCHW>>(res_conv): Identity<>> ATTT殘差注意力: Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=64, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfa30>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfac0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2cfb80>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=64>>> DOWN下采樣: Conv2d<input_channels=64, output_channels=64, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfdc0>, bias_init=None, format=NCHW>
-------- 3
BL1塊1: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cfe50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2cff40>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac130>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=64, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac250>, bias_init=None, format=NCHW>> BL2塊2: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac1f0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=256, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac370>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=256>(4): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac4c0>, bias_init=None, format=NCHW>>(res_conv): Identity<>> ATTT殘差注意力: Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=128, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac6a0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=128, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2ac7c0>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc2ac820>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=128>>> DOWN下采樣: Identity<>functools.partial(<class '__main__.ConvNextBlock'>, mult=2)
x.shape
(2, 20, 32, 32)
t
Tensor(shape=[5], dtype=Int32, value= [0, 1, 2, 3, 4])
t=time_mlp(t) ###這里正確了
t
Tensor(shape=[5, 128], dtype=Float32, value=
[[ 1.89717814e-01,  1.14008449e-02,  3.33061777e-02 ...  1.43985003e-01,  3.92933972e-02, -1.06829256e-02],[ 1.93240538e-01,  1.78442001e-02,  6.77158684e-02 ...  1.36301309e-01,  7.64560923e-02, -1.50307640e-02],[ 1.83035284e-01,  2.44393535e-02,  8.70461762e-02 ...  1.38745904e-01,  1.33171901e-01, -3.85175534e-02],[ 1.60673216e-01,  5.66724911e-02,  6.34887069e-02 ...  1.58708930e-01,  1.91956162e-01, -7.78784081e-02],[ 1.33557051e-01,  1.20526701e-01,  5.27272746e-03 ...  1.78237736e-01,  2.34055102e-01, -9.55123529e-02]])
# 選取第一行
# 選取第一行
new_t = t[0:1, :]  # 或者直接 t[0:1] 也可以 = t[0:1, :]  # 或者直接 t[0:1] 也可以
new_t.shape
(1, 128)
t=new_t
class ConvNextBlock(nn.Cell):def __init__(self, dim=20, dim_out=32, *, time_emb_dim=128, mult=2, norm=True):super().__init__()self.mlp = (nn.SequentialCell(nn.GELU(), nn.Dense(time_emb_dim, dim))if exists(time_emb_dim)else None)self.ds_conv = nn.Conv2d(dim, dim, 7, padding=3, group=dim, pad_mode="pad")self.net = nn.SequentialCell(nn.GroupNorm(1, dim) if norm else nn.Identity(),nn.Conv2d(dim, dim_out * mult, 3, padding=1, pad_mode="pad"),nn.GELU(),nn.GroupNorm(1, dim_out * mult),nn.Conv2d(dim_out * mult, dim_out, 3, padding=1, pad_mode="pad"),)self.res_conv = nn.Conv2d(dim, dim_out, 1) if dim != dim_out else nn.Identity()def construct(self, x, time_emb=None):h = self.ds_conv(x)if exists(self.mlp) and exists(time_emb):assert exists(time_emb), "time embedding must be passed in"condition = self.mlp(time_emb)condition = condition.expand_dims(-1).expand_dims(-1)h = h + conditionh = self.net(h)return h + self.res_conv(x)
BL1=ConvNextBlock()
BL1
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=20, has_bias=True>>(ds_conv): Conv2d<input_channels=20, output_channels=20, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=20, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffddded2b80>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=20>(1): Conv2d<input_channels=20, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffddded2a00>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffddded2f70>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=20, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffdde372970>, bias_init=None, format=NCHW>>
x = ms.Tensor(shape=(batch_size, channels, image_side_length, image_side_length), dtype=ms.float32, init=Normal())
x.shape  # 顯示數據形狀
x = init_conv(x)
t=new_t
x.shape,t.shape
((2, 20, 32, 32), (1, 128))
BL1(x, t)
-Tensor(shape=[2, 32, 32, 32], dtype=Float32, value=
[[[[ 4.79678512e-01,  6.18093789e-01,  4.11911160e-01 ...  2.45554969e-01,  2.87007272e-01,  5.84303178e-02],[ 3.35714668e-01,  5.81144929e-01,  3.02089810e-01 ...  7.34893382e-02, -2.16056317e-01, -2.40196183e-01],[ 6.84010506e-01,  1.10967433e+00,  7.40820885e-01 ...  4.42677915e-01, -5.60586452e-02, -1.65627971e-01],...[ 7.63499856e-01,  1.13718486e+00,  9.87868309e-01 ...  6.83883190e-01,  1.12375900e-01, -3.52420285e-02],[ 7.06175983e-01,  1.14337587e+00,  9.23162937e-01 ...  6.31385088e-01,  1.49176538e-01, -3.98113094e-02],[ 1.76896825e-01,  4.82230633e-01,  4.89957243e-01 ...  4.00457889e-01, -2.55417023e-02,  1.21514685e-01]],[[ 2.81717628e-01, -9.01857391e-04, -8.76490697e-02 ... -7.88121223e-02, -1.26668364e-01, -1.73759460e-01],[ 1.92831263e-01, -1.43926665e-01, -1.48099199e-01 ... -2.68793881e-01, -1.00307748e-01, -1.20211102e-01],[ 1.39493421e-01,  2.17211112e-01,  1.45897210e-01 ...  1.56540543e-01,  1.65525198e-01,  5.83062395e-02],...[ 6.92536831e-02,  5.68503514e-02,  3.68858390e-02 ...  8.93135369e-02,  1.07637540e-01,  4.47027944e-02],[ 1.12979397e-01,  2.12710798e-01,  5.37276417e-02 ...  1.01731792e-01, -4.49074507e-02, -2.13617496e-02],[ 7.63944685e-02,  1.35763273e-01,  1.16834700e-01 ...  1.85339376e-01,  1.34029865e-01,  2.19782546e-01]],[[ 1.30130202e-01,  3.29991281e-01,  4.25871283e-01 ...  3.08504313e-01,  4.61269379e-01,  1.57225683e-01],[ 4.05929983e-01,  7.34413862e-01,  8.77515614e-01 ...  7.71579146e-01,  9.44401443e-01,  5.34572124e-01],[-3.62766758e-02,  3.63330275e-01,  4.08758491e-01 ...  3.54813248e-01,  5.34208298e-01,  2.87856668e-01],...[-1.26003683e-01,  2.56464094e-01,  3.78679991e-01 ...  4.59082156e-01,  5.85478425e-01,  2.87693620e-01],[-4.88909632e-02,  2.99566031e-01,  3.99350137e-01 ...  4.61422205e-01,  4.17674005e-01,  7.26606846e-02],[-2.39267662e-01, -3.09484214e-01, -2.71493912e-01 ... -7.24366307e-02, -1.12498447e-01, -1.38472736e-01]],...[[-1.59212112e-01,  7.95098245e-02, -1.85586754e-02 ... -2.23550811e-01, -2.70033002e-01, -2.44036630e-01],[-1.60980105e-01,  4.35432374e-01,  5.99099815e-01 ...  4.49325353e-01,  4.23938036e-01,  3.12254220e-01],[-3.05827290e-01,  7.60348588e-02,  2.39996284e-01 ...  2.72248350e-02, -1.65684037e-02, -1.06293596e-01],...[-2.98552692e-01,  5.39370701e-02,  2.43080735e-01 ...  1.28992423e-01,  6.57526404e-02, -7.48077184e-02],[-2.99177408e-01, -1.83835357e-01, -3.95203456e-02 ... -4.43453342e-02, -1.39597371e-01, -2.18513533e-01],[ 1.12659251e-02,  2.71181725e-02,  8.25900063e-02 ...  1.92151055e-01,  2.09751755e-01,  4.28373404e-02]],[[-1.12641305e-01,  2.13623658e-01,  7.53313601e-02 ... -1.21324155e-02, -1.53158829e-01, -4.77597833e-01],[-3.84328097e-01,  6.15204051e-02,  1.25263743e-02 ... -7.10279793e-02, -2.77535737e-01, -3.76104653e-01],[-4.07613993e-01,  1.12187594e-01,  3.72527242e-02 ... -2.06387043e-02, -1.46990225e-01, -2.87585199e-01],...[-3.61820847e-01,  9.99522805e-02, -9.61808674e-03 ... -4.89163473e-02, -1.65467933e-01, -3.17837149e-01],[-6.31257832e-01, -2.93515027e-01, -3.12220454e-01 ... -1.29600003e-01, -1.40924498e-01, -1.52635127e-01],[-5.44437885e-01, -2.92856932e-01, -2.64693975e-01 ... -1.66876107e-01, -1.02364674e-01,  1.51942633e-02]],[[-4.31133687e-01, -6.47886336e-01, -8.31129193e-01 ... -8.14953923e-01, -8.53494108e-01, -5.33654928e-01],[-1.00464332e+00, -1.09428477e+00, -1.38921976e+00 ... -1.53568864e+00, -1.31930661e+00, -4.56116676e-01],[-1.13990593e+00, -1.03481460e+00, -1.49022770e+00 ... -1.62232399e+00, -1.40410137e+00, -5.24185598e-01],...[-1.26637757e+00, -1.16348124e+00, -1.51403701e+00 ... -1.62057757e+00, -1.49686539e+00, -5.62209725e-01],[-1.11411476e+00, -9.28978443e-01, -1.17068827e+00 ... -1.24776149e+00, -1.03560197e+00, -3.00330132e-01],[-8.52251232e-01, -7.45468676e-01, -9.34467912e-01 ... -1.00492966e+00, -8.28293085e-01, -2.36020580e-01]]],[[[ 4.66426373e-01,  6.25464499e-01,  3.93321365e-01 ...  2.30096430e-01,  3.03178400e-01,  5.51086180e-02],[ 3.32810491e-01,  6.17641032e-01,  3.06311995e-01 ...  1.02875866e-01, -1.90033853e-01, -2.67078996e-01],[ 6.84333742e-01,  1.09874713e+00,  7.69674480e-01 ...  4.62564647e-01, -6.67065307e-02, -2.36097589e-01],...[ 7.33127177e-01,  1.17721725e+00,  9.89053011e-01 ...  7.15648472e-01,  1.17136240e-01, -4.71793935e-02],[ 6.87817514e-01,  1.09633350e+00,  8.85757685e-01 ...  5.86604059e-01,  9.45525989e-02, -3.36224921e-02],[ 1.95047542e-01,  4.68445808e-01,  4.64000225e-01 ...  3.75145793e-01,  1.80484354e-03,  1.13696203e-01]],[[ 2.65101492e-01,  2.46687196e-02, -1.07584536e-01 ... -1.03970490e-01, -8.17846432e-02, -1.53097644e-01],[ 1.52385280e-01, -8.83764774e-02, -1.62100300e-01 ... -2.18001902e-01, -9.41001922e-02, -1.19305871e-01],[ 1.61403462e-01,  2.30408147e-01,  1.57331020e-01 ...  1.96940184e-01,  1.30461589e-01,  6.52605519e-02],...[ 5.33300415e-02,  1.22396260e-01, -1.88096687e-02 ...  1.05915010e-01,  1.53571054e-01,  2.45359484e-02],[ 9.76279452e-02,  1.82655305e-01,  1.09691672e-01 ...  1.40925452e-01,  8.01324844e-04,  1.88996084e-03],[ 7.78941736e-02,  1.48156703e-01,  1.39126211e-01 ...  2.34847367e-01,  1.08238310e-01,  2.09336147e-01]],[[ 1.17656320e-01,  3.43433738e-01,  4.39827234e-01 ...  3.09850901e-01,  4.53984410e-01,  1.49862975e-01],[ 3.95844698e-01,  7.22729802e-01,  8.56524229e-01 ...  8.03788304e-01,  9.29986835e-01,  5.35356879e-01],[-5.63383885e-02,  3.74548256e-01,  3.96855712e-01 ...  3.82491171e-01,  5.69522381e-01,  3.37262630e-01],...[-1.52335018e-01,  2.06072912e-01,  3.62504959e-01 ...  4.47174758e-01,  5.80285132e-01,  2.62391001e-01],[-3.93561423e-02,  3.46813500e-01,  3.57039988e-01 ...  4.35864031e-01,  4.56840277e-01,  7.46745914e-02],[-2.53383636e-01, -2.85494059e-01, -2.50772089e-01 ... -1.19937055e-01, -9.26215500e-02, -1.42144099e-01]],...[[-1.72060549e-01,  7.35142902e-02,  1.05164722e-02 ... -2.21164092e-01, -2.66059518e-01, -2.46203467e-01],[-1.51937515e-01,  4.78927851e-01,  5.69894075e-01 ...  4.43681806e-01,  4.60492224e-01,  2.69292653e-01],[-3.13104421e-01,  1.40309155e-01,  2.25837916e-01 ...  3.81425694e-02,  7.96409026e-02, -1.00592285e-01],...[-3.12582165e-01,  3.55643854e-02,  1.99504092e-01 ...  1.73697099e-01,  5.84969185e-02, -7.21051544e-02],[-2.97579527e-01, -1.40844122e-01, -5.89616746e-02 ... -2.86213737e-02, -1.22039340e-01, -2.13227138e-01],[ 3.26608960e-03,  4.80151782e-03,  5.54511398e-02 ...  1.92409024e-01,  1.99357480e-01,  3.34331095e-02]],[[-1.12870112e-01,  2.09549189e-01,  9.65655223e-02 ... -4.27889600e-02, -1.44986391e-01, -4.36559677e-01],[-3.58288437e-01,  9.11962241e-02, -8.71371478e-04 ... -4.59572896e-02, -2.30747938e-01, -4.01585191e-01],[-3.93885374e-01,  1.43090501e-01, -1.07427724e-02 ... -2.74238884e-02, -1.51127338e-01, -3.17271531e-01],...[-3.39975446e-01,  6.32377267e-02, -4.78150323e-02 ... -9.10668075e-02, -1.39780402e-01, -2.90815294e-01],[-6.53750360e-01, -2.34141201e-01, -2.83103675e-01 ... -9.91634205e-02, -1.61574319e-01, -1.63588241e-01],[-5.44618607e-01, -2.84289837e-01, -2.75803030e-01 ... -1.71445966e-01, -1.29518926e-01,  9.64298844e-04]],[[-4.26712006e-01, -6.10979497e-01, -8.42772007e-01 ... -8.18627119e-01, -8.19367886e-01, -5.47874212e-01],[-1.00363958e+00, -1.09864676e+00, -1.45736146e+00 ... -1.57554007e+00, -1.27784061e+00, -5.02054691e-01],[-1.13520634e+00, -1.06120992e+00, -1.46519005e+00 ... -1.58347833e+00, -1.37640107e+00, -5.30683100e-01],...[-1.25580835e+00, -1.18095815e+00, -1.52926147e+00 ... -1.63596940e+00, -1.44870484e+00, -5.40451765e-01],[-1.12258959e+00, -9.22193348e-01, -1.14803100e+00 ... -1.24472821e+00, -1.02205288e+00, -3.08310509e-01],[-8.60808074e-01, -7.58719683e-01, -9.61336493e-01 ... -9.92724419e-01, -8.70862603e-01, -2.35298872e-01]]]])
x = ms.Tensor(shape=(batch_size, channels, image_side_length, image_side_length), dtype=ms.float32, init=Normal())
x.shape  # 顯示數據形狀
x = init_conv(x)
t=new_t
x.shape,t.shape  ##需要放到一個格子里面才能運算成功
for block1, block2, attn, downsample in downs:###事實循環3次,每次有這四個變量x = block1(x, t)x = block2(x, t)x = attn(x)h.append(x)x = downsample(x)
/
x.shape
(2, 128, 8, 8)
len(h)
3
h ##[x0=2 32 32 32  x1=2 64 16 16 x3=2 128 8 8] 
[Tensor(shape=[2, 32, 32, 32], dtype=Float32, value=Tensor(shape=[2, 64, 16, 16], dtype=Float32, value=Tensor(shape=[2, 128, 8, 8], dtype=Float32, value=
len_h = len(h) - 1
len_h
2
h[len_h].shape,x.shape  ##最后的一個downsample的維度沒有變化
((2, 128, 8, 8), (2, 128, 8, 8))
ops.concat((x, h[len_h]), 1)
-Tensor(shape=[2, 256, 8, 8], dtype=Float32, 

這段代碼使用了MindSpore框架中的ops.concat函數來執行張量拼接操作。下面是對該代碼片段的詳細解析:

  • ops.concat: 這是MindSpore操作庫中的一個函數,用于沿著指定維度拼接一個張量列表。這里的"ops"是MindSpore中操作(operations)的簡寫,用于訪問各種數學和數組操作。

  • (x, h[len_h]): 這是一個包含兩個張量的元組,它們是要被拼接的輸入。其中:

    • x 是一個張量。
    • h[len_h] 表示從列表或數組h中獲取索引為len_h的元素。這通常意味著取h的最后一個元素,如果len_hh的長度的話。不過,確切的行為依據len_h的具體值而定,如果len_h是動態計算的結果或者代表序列的長度,則它可能不是簡單地指最后一個元素,而是某個特定位置的元素。
  • , 1): 這個參數指定了拼接操作應該沿著第1個維度進行。在MindSpore和其他類似的深度學習庫中,維度計數通常從0開始,所以1表示第二個維度。這意味著xh[len_h]將在它們的第二個維度上被連接起來,生成一個新的張量,其中這兩個輸入張量的相應列被串聯在一起。

綜上所述,這段代碼的作用是將張量x和序列h中的最后一個元素(或索引為len_h的元素)在第二個維度上進行拼接,從而生成一個新的張量。這樣的操作常見于循環神經網絡(RNNs)等模型中,用于更新隱藏狀態或組合不同來源的信息。

x = mid_block1(x, t)
x = mid_attn(x)
x = mid_block2(x, t)
x.shape
\(2, 128, 8, 8)
len_h = len(h) - 1
len_h
2
i=0
for block1, block2, attn, upsample in ups:  ##ups 只有2個元素i=i+1print("--------",i)print("BL1塊1:",block1,"BL2塊2:", block2, "ATTT殘差注意力:",attn, "UP上采樣:",upsample)# block_klass(dim_out * 2, dim_in, time_emb_dim=time_dim),# block_klass(dim_in, dim_in, time_emb_dim=time_dim),# Residual(PreNorm(dim_in, LinearAttention(dim_in))),# Upsample(dim_in) if not is_last else nn.Identity(),### 第一層BL1
#(res_conv): Conv2d<input_channels=256, output_channels=64  (128,64)### 第一層BL2
#(4): Conv2d<input_channels=128[64*2], output_channels=64, (res_conv): Identity<>  (128,64)### 第一層Res
#Conv2d<input_channels=128, output_channels=64,,  (128,64)### 第一層up
#Conv2dTranspose<input_channels=64, output_channels=64, (64,64)### 第二層BL1
#(res_conv): Conv2d<input_channels=128, output_channels=32  (64,32)### 第二層BL2
# Conv2d<input_channels=64[32*2], output_channels=32,  (res_conv): Identity<>  (64,32)### 第二層Res
#Conv2d<input_channels=128, output_channels=32, (64,32)### 第二層up
#  Conv2dTranspose<input_channels=32, output_channels=32,  (32,32)    
-------- 1
BL1塊1: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=256, has_bias=True>>(ds_conv): Conv2d<input_channels=256, output_channels=256, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=256, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2b80>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=256>(1): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee15430>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee15d30>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=256, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb24c0>, bias_init=None, format=NCHW>> BL2塊2: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=64, has_bias=True>>(ds_conv): Conv2d<input_channels=64, output_channels=64, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=64, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbcd00>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=64>(1): Conv2d<input_channels=64, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedbc550>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c4f0>, bias_init=None, format=NCHW>>(res_conv): Identity<>> ATTT殘差注意力: Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=64, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xffffac354580>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30cc10>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc30c9a0>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=64>>> UP上采樣: Conv2dTranspose<input_channels=64, output_channels=64, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30cac0>, bias_init=None, format=NCHW>
-------- 2
BL1塊1: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=128, has_bias=True>>(ds_conv): Conv2d<input_channels=128, output_channels=128, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=128, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c2e0>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=128>(1): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc30c5e0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17f10>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17760>, bias_init=None, format=NCHW>> BL2塊2: ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=32, has_bias=True>>(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17a00>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17580>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17dc0>, bias_init=None, format=NCHW>>(res_conv): Identity<>> ATTT殘差注意力: Residual<(fn): PreNorm<(fn): LinearAttention<(to_qkv): Conv2d<input_channels=32, output_channels=384, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc3064f0>, bias_init=None, format=NCHW>(to_out): SequentialCell<(0): Conv2d<input_channels=128, output_channels=32, kernel_size=(1, 1), stride=(1, 1), pad_mode=valid, padding=0, dilation=(1, 1), group=1, has_bias=True, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306b50>, bias_init=<mindspore.common.initializer.Uniform object at 0xfffefc3065b0>, format=NCHW>(1): LayerNorm<>>>(norm): GroupNorm<num_groups=1, num_channels=32>>> UP上采樣: Conv2dTranspose<input_channels=32, output_channels=32, kernel_size=(4, 4), stride=(2, 2), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc306f70>, bias_init=None, format=NCHW>
class ConvNextBlock(nn.Cell):def __init__(self, dim=256, dim_out=64, *, time_emb_dim=128, mult=2, norm=True):super().__init__()self.mlp = (nn.SequentialCell(nn.GELU(), nn.Dense(time_emb_dim, dim))if exists(time_emb_dim)else None)self.ds_conv = nn.Conv2d(dim, dim, 7, padding=3, group=dim, pad_mode="pad")self.net = nn.SequentialCell(nn.GroupNorm(1, dim) if norm else nn.Identity(),nn.Conv2d(dim, dim_out * mult, 3, padding=1, pad_mode="pad"),nn.GELU(),nn.GroupNorm(1, dim_out * mult),nn.Conv2d(dim_out * mult, dim_out, 3, padding=1, pad_mode="pad"),)self.res_conv = nn.Conv2d(dim, dim_out, 1) if dim != dim_out else nn.Identity()def construct(self, x, time_emb=None):h = self.ds_conv(x)if exists(self.mlp) and exists(time_emb):assert exists(time_emb), "time embedding must be passed in"condition = self.mlp(time_emb)condition = condition.expand_dims(-1).expand_dims(-1)h = h + conditionh = self.net(h)return h + self.res_conv(x)
BL1=ConvNextBlock()
BL1
ConvNextBlock<(mlp): SequentialCell<(0): GELU<>(1): Dense<input_channels=128, output_channels=256, has_bias=True>>(ds_conv): Conv2d<input_channels=256, output_channels=256, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=256, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffdddd94880>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=256>(1): Conv2d<input_channels=256, output_channels=128, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffdb504af10>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=128>(4): Conv2d<input_channels=128, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffdb53c3d60>, bias_init=None, format=NCHW>>(res_conv): Conv2d<input_channels=256, output_channels=64, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffdcc3e9970>, bias_init=None, format=NCHW>>

for block1, block2, attn, upsample in ups:x = ops.concat((x, h[len_h]), 1)len_h -= 1x = block1(x, t)x = block2(x, t)x = attn(x)x = upsample(x)
x.shape
(2, 32, 32, 32)
rx=final_conv(x)
rx.shape
(2, 3, 32, 32)
    def construct(self, x, time):x = self.init_conv(x)t = self.time_mlp(time) if exists(self.time_mlp) else Noneh = []for block1, block2, attn, downsample in self.downs:x = block1(x, t)x = block2(x, t)x = attn(x)h.append(x)x = downsample(x)x = self.mid_block1(x, t)x = self.mid_attn(x)x = self.mid_block2(x, t)len_h = len(h) - 1for block1, block2, attn, upsample in self.ups: ###因為up只有2個元素 down 有3個元素  但是我們在這里只是循環2次 并沒有取出h[0]  就是downn 最開始的那個(20,32)x = ops.concat((x, h[len_h]), 1) ##這步是有啥作用?就是傳說的skip connect 或者所謂的殘差?len_h -= 1x = block1(x, t)x = block2(x, t)x = attn(x)x = upsample(x)return self.final_conv(x)

這段代碼定義了一個基于U-Net架構的模型,主要應用于圖像處理、圖像生成或分割任務中,特別是在需要保留細節信息同時捕捉上下文特征的場景下。此模型通過編碼器-解碼器結構,結合跳躍連接(skip connections)來實現這一點。下面是逐部分的解析:

初始化與時間嵌入

  • self.init_conv(x):對輸入x應用初始卷積層,開始特征提取。
  • t = self.time_mlp(time):如果模型設計中包含時間相關的處理(常用于時序數據或在生成模型中引入時間條件),則通過多層感知機(MLP)處理時間信號time,得到時間嵌入t

編碼器路徑(Downsampling)

  • 循環遍歷self.downs中的模塊(每個模塊包含兩個卷積塊block1, block2、一個注意力模塊attn和一個下采樣模塊downsample):
    • 兩個卷積塊分別應用特征變換,并可選擇性地結合時間嵌入t
    • 應用注意力機制模塊attn增強特征表示。
    • 將當前特征圖x添加到列表h中作為跳躍連接的存儲。
    • 使用下采樣模塊減小空間尺寸,增加深度。

中間塊(Bottleneck)

  • 應用一系列中間層變換,包括兩個卷積塊和一個注意力模塊,進一步提煉特征。

解碼器路徑(Upsampling)

  • 反向循環遍歷self.ups中的模塊,與編碼器部分相對應,但包含上采樣操作:
    • ops.concat((x, h[len_h]), 1):這是關鍵的跳躍連接步驟,將當前解碼器層的輸出x與對應編碼器層的特征圖h[len_h]沿通道維度(維度1)拼接,從而傳遞并合并局部細節信息。
    • 減少len_h以在下一輪迭代中獲取上一層的特征圖。
    • 繼續應用兩個卷積塊和注意力模塊,以及上采樣操作,逐步增加空間尺寸并整合信息。

輸出

  • 最后,通過self.final_conv(x)應用最終的卷積層,生成輸出特征圖或直接預測像素級結果。

跳躍連接(Skip Connections)的作用

  • 跳躍連接(在這里體現為特征圖的拼接)有助于解決梯度消失問題,使得網絡能更有效地學習細節信息。
  • 它允許低級特征(保留了更多細節信息)與高級特征(提供了更多上下文信息)在解碼階段融合,這對于恢復輸入的精細結構至關重要,尤其是在圖像生成和分割任務中。
  • 因此,這種設計不僅有助于保持對輸入細節的精確重構,還能促進生成內容的高保真度和清晰度。
final_conv  ##恢復到3個channel
SequentialCell<(0): ConvNextBlock<(ds_conv): Conv2d<input_channels=32, output_channels=32, kernel_size=(7, 7), stride=(1, 1), pad_mode=pad, padding=3, dilation=(1, 1), group=32, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefc2acb50>, bias_init=None, format=NCHW>(net): SequentialCell<(0): GroupNorm<num_groups=1, num_channels=32>(1): Conv2d<input_channels=32, output_channels=64, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefee17bb0>, bias_init=None, format=NCHW>(2): GELU<>(3): GroupNorm<num_groups=1, num_channels=64>(4): Conv2d<input_channels=64, output_channels=32, kernel_size=(3, 3), stride=(1, 1), pad_mode=pad, padding=1, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2100>, bias_init=None, format=NCHW>>(res_conv): Identity<>>(1): Conv2d<input_channels=32, output_channels=3, kernel_size=(1, 1), stride=(1, 1), pad_mode=same, padding=0, dilation=(1, 1), group=1, has_bias=False, weight_init=<mindspore.common.initializer.HeUniform object at 0xfffefedb2eb0>, bias_init=None, format=NCHW>>


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36505.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20240622服務器異常

異常表現 玩法無法登錄服務器&#xff0c;遠程XShell 無法連接到服務器,IT 后臺查看服務器內存使用完畢。 異常處理 IT 直接重啟服務器 后續異常 Docker 服務器無法啟動 使用命令查看錯誤&#xff1a; sudo systemctl status docker.service docker.service - Docker Ap…

【Linux】線程id與互斥(線程三)

上一期我們進行了線程控制的了解與相關操作&#xff0c;但是扔就有一些問題沒有解決 本章第一階段就是解決tid的問題&#xff0c;第二階段是進行模擬一個簡易線程庫&#xff08;為了加深對于C庫封裝linux原生線程的理解&#xff09;&#xff0c;第三階段就是互斥。 目錄 線程id…

鏈在一起怎么聯機 鏈在一起遠程同玩聯機教程

steam中最近特別熱門的多人跑酷冒險的游戲&#xff1a;《鏈在一起》&#xff0c;英文名稱叫做Chained Together&#xff0c;在游戲中我們需要開始自己的旅程&#xff0c;在地獄的深處&#xff0c;與我們的同伴被鏈在一起。我們的任務是通過盡可能高的攀登逃離地獄。每一次跳躍都…

Python第三方庫GDAL 安裝

安裝GDAL的方式多種&#xff0c;包括pip、Anaconda、OSGeo4W等。筆者在安裝過程中&#xff0c;唯獨使用pip安裝遇到問題。最終通過輪子文件&#xff08;.whl&#xff09;成功安裝。 本文主要介紹如何下載和安裝較新版本的GDAL輪子文件。 一、GDAL輪子文件下載 打開Github網站…

Python學習打卡:day16

day16 筆記來源于&#xff1a;黑馬程序員python教程&#xff0c;8天python從入門到精通&#xff0c;學python看這套就夠了 目錄 day16116、SQL 基礎和 DDLSQL的概述SQL語言的分類SQL的語法特征DDL — 庫管理DDL — 表管理 117、SQL — DMLDML概述數據插入 INSERT數據刪除 DEL…

深入理解 Dubbo:分布式服務框架的核心原理與實踐

目錄 Dubbo 概述Dubbo 的架構Dubbo 的關鍵組件 服務提供者&#xff08;Provider&#xff09;服務消費者&#xff08;Consumer&#xff09;注冊中心&#xff08;Registry&#xff09;監控中心&#xff08;Monitor&#xff09;調用鏈追蹤&#xff08;Trace&#xff09; Dubbo 的…

電腦瀏覽器問題

網絡連接正常&#xff0c;但是瀏覽器就是打不開網頁&#xff0c;顯示未連接什么的。 搞了半天&#xff0c;不是代理服務器問題。 也不是端口問題。 也不是軟件版本問題。 竟然是瀏覽器插件的問題&#xff0c;插件禁用&#xff0c;奇跡般的好了。 參考&#xff1a; 電腦有網…

專題頁面設計指南:從構思到實現

如何設計專題頁&#xff1f;你有什么想法&#xff1f;專題頁的設計主要以發揚產品優勢為核心。一個好的專題頁可以從不同的角度向用戶介紹產品&#xff0c;擴大產品的相關優勢&#xff0c;表達產品的優勢&#xff0c;讓用戶在短時間內了解產品。因此&#xff0c;在設計詳細信息…

純血鴻蒙Beta版本發布,中國華為,站起來了!

2024年6月21日至23日&#xff0c;華為開發者大會2024&#xff08;HDC 2024&#xff09;于東莞盛大舉行。 此次大會不僅在會場設置了包括鴻蒙原生應用、統一生態統一互聯等在內的11個展區&#xff0c;以供展示HarmonyOS NEXT的強大實力&#xff0c;還對外宣布了HarmonyOS的最新進…

240627_關于CNN中圖像維度變化問題

240627_關于CNN中圖像維度變化問題 在學習一些經典模型時&#xff0c;其中得維度變化關系總搞不太明白&#xff0c;集中學習了以下&#xff0c;在此作以梳理總結&#xff1a; 一般來說涉及到的維度變換都是四個維度&#xff0c;當batch size4&#xff0c;圖像尺寸為640*640&a…

kylin v10 離線安裝chrome centos離線安裝chrome linux離線安裝谷歌瀏覽器

1. 先用自己聯網的計算機&#xff0c;下載離線安裝包&#xff0c;瀏覽器輸入鏈接下載安裝包&#xff1a; https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm 1.2. 信創環境不用執行下面&#xff0c;因為沒網 1.3. 若為阿里云服務器&#xff0c;或服…

深度學習驅動的圖像識別革命

深度學習驅動的圖像識別革命正在徹底改變我們處理、分析和理解視覺信息的方式。以下是對這一革命的分點表示和歸納&#xff1a; 深度學習在圖像識別中的基本原理 特征提取&#xff1a;深度學習通過構建多層神經網絡&#xff0c;能夠自動從原始圖像數據中提取出復雜的特征&…

【第4章】MyBatis-Plus持久層接口之Service Interface(下)

文章目錄 前言一、get1. 示例(getById)2. 示例&#xff08;getOne&#xff09;3. 示例&#xff08;getOne 不拋出異常&#xff09;4. 示例&#xff08;getMap&#xff09;5. 示例&#xff08;getObj&#xff09; 二、list1. 示例&#xff08;list&#xff09;2. 示例&#xff0…

AR導航技術加持,圖書館閱讀體驗智慧升級

在信息爆炸的今天&#xff0c;圖書館作為知識的寶庫&#xff0c;其藏書量和種類日益增多。然而&#xff0c;傳統的圖書館導航方式已逐漸無法滿足用戶對快速、準確定位圖書的需求。本文將探討圖書館AR地圖導航的實現原理、技術優勢、功能特點以及市場前景&#xff0c;揭示為何AR…

VS studio2019配置遠程連接Ubuntu

VS studio2019配置遠程連接Ubuntu 1、網絡配置 &#xff08;1&#xff09;獲取主機IP &#xff08;2&#xff09;獲取Ubuntu的IP &#xff08;3&#xff09;在 windows 的控制臺中 ping 虛擬機的 ipv4 地址&#xff0c;在 Ubuntu 中 ping 主機的 ipv4 地址。 ubuntu: ping…

【Linux】對共享庫加載問題的深入理解——基本原理概述

原理概述 【linux】詳解——庫-CSDN博客 共享庫被加載后&#xff0c;系統會為該共享庫創建一個結構&#xff0c;這個結構體中的字段描述了庫的各種屬性。在內存中可能會加載很多庫&#xff0c;每一個庫都用一個結構體描述。把這些結構體用一些數據結構管理起來&#xff0c;系…

WordPress Dokan Pro插件 SQL注入漏洞復現(CVE-2024-3922)

0x01 產品簡介 WordPress Dokan Pro插件是一款功能強大的多供應商電子商務市場解決方案,功能全面、易于使用的多供應商電子商務平臺解決方案,適合各種規模的電商項目。允許管理員創建一個多賣家平臺,賣家可以注冊賬戶并在平臺上創建自己的店鋪,展示和銷售自己的產品。提供…

kali下安裝使用蟻劍(AntSword)

目錄 0x00 介紹0x01 安裝0x02 使用1. 設置代理2. 請求頭配置3. 編碼器 0x00 介紹 蟻劍&#xff08;AntSword&#xff09;是一個webshell管理工具。 官方文檔&#xff1a;https://www.yuque.com/antswordproject/antsword 0x01 安裝 在kali中安裝蟻劍&#xff0c;分為兩部分&am…

Zabbix 監控系統部署

Zabbix 監控系統部署 Zabbix是一個企業級開源分布式監控解決方案&#xff0c;可監控網絡的眾多參數以及服務器、虛擬機、應用程序、服務、數據庫、網站、云等的運行狀況和完整性。 Zabbix 使用靈活的通知機制&#xff0c;允許用戶為幾乎任何事件配置基于電子郵件的警報。這允許…

java發送圖文到公眾號

這兩天接到了一個新任務&#xff0c;通過后臺管理編寫文章&#xff0c;發送到官網的同時&#xff0c;推送一份到公眾號&#xff0c;研究了一下微信的文檔&#xff0c;發現不難&#xff0c;只需要有幾個注意點就可以了。 注意&#xff1a; 微信公眾號只能訪問微信自己上傳的圖片…