鱼C论坛

 找回密码
 立即注册
查看: 713|回复: 3

[已解决]请画出这段代码的结构图

[复制链接]
发表于 2023-8-16 21:36:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
# 模型、损失和优化器
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = DeeperAutoencoderWithMoreAttention().to(device)
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)
best_psnr = 0
best_model_save_path = './save_root/best_autoencoder.pth'
model_save_path = './save_root/epoch{}_model.pth'
scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=3000, gamma=0.1)

num_epochs = 5000
if __name__ == '__main__':
    print(device)
    print("开始运行ing")

    for epoch in range(num_epochs):
        start_time = time()

        for (clean_images, _), (noisy_images, _) in zip(clean_loader, noisy_loader):
            clean_images = clean_images.to(device)
            noisy_images = noisy_images.to(device)

            outputs = model(noisy_images)
            loss = criterion(outputs, clean_images)
            optimizer.zero_grad()
            loss.backward()
            optimizer.step()

        scheduler.step()

        save_combined_images(model, noisy_loader, clean_loader, output_path=f"./save_image/index{epoch}epoch.png")

        # 计算平均PSNR
        model.eval()
        total_psnr = 0
        with torch.no_grad():
            for (clean_images, _), (noisy_images, _) in zip(clean_loader, noisy_loader):
                clean_images = clean_images.to(device)
                noisy_images = noisy_images.to(device)
                outputs = model(noisy_images)
                psnr = compute_psnr(clean_images, outputs)
                total_psnr += psnr

        avg_psnr = total_psnr / len(clean_loader)
        end_time = time()

        print(
            f"Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}, PSNR: {avg_psnr:.4f}, Time:{end_time - start_time:.2f}")

        if avg_psnr > best_psnr:
            best_psnr = avg_psnr
            torch.save(model.state_dict(), best_model_save_path)
            print(f"在第 {epoch + 1} 个epoch保存了最佳模型,PSNR为: {avg_psnr:.4f}")

        if (epoch + 1) % 10 == 0:
            torch.save(model.state_dict(), model_save_path.format(epoch))
            print(f"在第 {epoch + 1} 个epoch保存模型,PSNR为: {avg_psnr:.4f}")

        model.train()

    print("Training completed!")
最佳答案
2023-8-16 21:54:43
                                      +-------------------+
                                      |                   |
                                      |    DeeperAuto-    |
                                      |    encoderWith    |
                                      |   MoreAttention  |
                                      |                   |
                                      +---------+---------+
                                                |
                                                |
     +-----------------------------+------------^--------------+
     |                             |                           |
     |                             |                           |
+----v----+                 +------v------+            +-------v--------+
|         |                 |             |            |                |
|  device |                 |  criterion  |            |   optimizer    |
|         |                 |             |            |                |
+----^----+                 +-------------+            +-------+--------+
     |                                                          |
     |                                                          |
+----v----------------------------------------------------------v------+
|                     Model Training Loop                                |
|                                                                        |
|    +---------------------------------------------------+               |
|    |                                                   |               |
|    |   for epoch in range(num_epochs):                  |               |
|    |       start_time = time()                          |               |
|    |       for (clean_images, _), (noisy_images, _) in    |               |
|    |           zip(clean_loader, noisy_loader):          |               |
|    |           clean_images = clean_images.to(device)    |               |
|    |           noisy_images = noisy_images.to(device)    |               |
|    |           output = model(noisy_images)              |               |
|    |           loss = criterion(output, clean_images)    |               |
|    |           optimizer.zero_grad()                     |               |
|    |           loss.backward()                           |               |
|    |           optimizer.step()                          |               |
|    |           scheduler.step()                          |               |
|    |           save_combined_images(model, noisy_loader,  |               |
|    |               clean_loader, output_path=f"./save_image/index{epoch}epoch.png")  |               |
|    |                                                   |               |
|    +---------------------------------------------------+               |
|                                                                        |
|    +---------------------------------------------------+               |
|    |                                                   |               |
|    |   model.eval()                                    |               |
|    |   total_psnr = 0                                 |               |
|    |   with torch.no_grad():                           |               |
|    |       for (clean_images, _), (noisy_images, _) in  |               |
|    |           zip(clean_loader, noisy_loader):          |               |
|    |           clean_images = clean_images.to(device)    |               |
|    |           noisy_images = noisy_images.to(device)    |               |
|    |           output = model(noisy_images)              |               |
|    |           psnr = compute_psnr(clean_images, output) |               |
|    |           total_psnr += psnr                       |               |
|    |                                                   |               |
|    +---------------------------------------------------+               |
|                                                                        |
|    +---------------------------------------------------+               |
|    |                                                   |               |
|    |   avg_psnr = total_psnr / len(clean_loader)        |               |
|    |   end_time = time()                               |               |
|    |                                                   |               |
|    |   print(                                          |               |
|    |       f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f},     |               |
|    |       PSNR: {avg_psnr:.4f}, Time: {end_time-start_time:.2f}")  |               |
|    |                                                   |               |
|    |   if avg_psnr > best_psnr:                         |               |
|    |       best_psnr = avg_psnr                         |               |
|    |       torch.save(model.state_dict(), best_model_save_path)          |               |
|    |       print(f"Saved the best model at epoch {epoch+1}, PSNR: {avg_psnr:.4f}")  |               |
|    |                                                   |               |
|    |   if (epoch+1) % 10 == 0:                          |               |
|    |       torch.save(model.state_dict(), model_save_path.format(epoch))  |               |
|    |       print(f"Saved model at epoch {epoch+1}, PSNR: {avg_psnr:.4f}")  |               |
|    |                                                   |               |
|    |   model.train()                                   |               |
|    |                                                   |               |
|    +---------------------------------------------------+               |
|                                                                        |
+------------------------------------------------------------------------+
求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-16 21:36:38 | 显示全部楼层
抱歉,作为一个文本AI助手,我无法直接绘制图形。但是,我可以为您提供代码的层次结构说明。
- 模型、损失和优化器的定义- 设备选择- 主循环开始  - 对每个 epoch 进行迭代    - 记录开始时间    - 对于每个数据批次      - 将干净图像和噪声图像放入设备中      - 运行模型得到输出      - 计算损失      - 清除梯度      - 反向传播并更新参数    - 更新学习率    - 保存组合图像    - 计算平均PSNR      - 对于每个数据批次        - 将干净图像和噪声图像放入设备中        - 运行模型得到输出        - 计算PSNR        - 累计PSNR值    - 计算平均PSNR    - 记录结束时间    - 打印当前epoch的损失、PSNR和运行时间    - 如果当前PSNR超过最佳PSNR,则保存模型    - 每10个epoch保存一次模型    - 将模型设置为训练模式- 输出训练完成的提示信息
希望这能帮到您!如果您还有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 21:38:51 | 显示全部楼层
这段代码是一个训练深度自编码器的程序。下面是代码的结构图:
  ┌───────────────────────┐
  │                       │
  │    模型、损失和优化器   │
  │                       │
  └───────────────────────┘
                │
                ▼
  ┌───────────────────────┐
  │                       │
  │       数据加载        │
  │                       │
  └───────────────────────┘
                │
                ▼
  ┌───────────────────────┐
  │                       │
  │      模型训练循环      │
  │                       │
  └───────────────────────┘
                │
                ▼
  ┌───────────────────────┐
  │                       │
  │   保存最佳模型和中间模型  │
  │                       │
  └───────────────────────┘
                │
                ▼
  ┌───────────────────────┐
  │                       │
  │    训练完成,输出信息   │
  │                       │
  └───────────────────────┘

在代码的主要部分,有一个循环来进行模型的训练。每个epoch内部,代码会遍历clean_loader和noisy_loader,将数据加载到设备上,然后通过模型生成输出,计算损失并进行优化器的反向传播。然后,代码会进行学习率的调整,并保存生成的合成图像。接下来,代码会计算平均PSNR,并保存最佳模型和中间模型。最后,代码会输出每个epoch的训练信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-16 21:54:43 | 显示全部楼层    本楼为最佳答案   
                                      +-------------------+
                                      |                   |
                                      |    DeeperAuto-    |
                                      |    encoderWith    |
                                      |   MoreAttention  |
                                      |                   |
                                      +---------+---------+
                                                |
                                                |
     +-----------------------------+------------^--------------+
     |                             |                           |
     |                             |                           |
+----v----+                 +------v------+            +-------v--------+
|         |                 |             |            |                |
|  device |                 |  criterion  |            |   optimizer    |
|         |                 |             |            |                |
+----^----+                 +-------------+            +-------+--------+
     |                                                          |
     |                                                          |
+----v----------------------------------------------------------v------+
|                     Model Training Loop                                |
|                                                                        |
|    +---------------------------------------------------+               |
|    |                                                   |               |
|    |   for epoch in range(num_epochs):                  |               |
|    |       start_time = time()                          |               |
|    |       for (clean_images, _), (noisy_images, _) in    |               |
|    |           zip(clean_loader, noisy_loader):          |               |
|    |           clean_images = clean_images.to(device)    |               |
|    |           noisy_images = noisy_images.to(device)    |               |
|    |           output = model(noisy_images)              |               |
|    |           loss = criterion(output, clean_images)    |               |
|    |           optimizer.zero_grad()                     |               |
|    |           loss.backward()                           |               |
|    |           optimizer.step()                          |               |
|    |           scheduler.step()                          |               |
|    |           save_combined_images(model, noisy_loader,  |               |
|    |               clean_loader, output_path=f"./save_image/index{epoch}epoch.png")  |               |
|    |                                                   |               |
|    +---------------------------------------------------+               |
|                                                                        |
|    +---------------------------------------------------+               |
|    |                                                   |               |
|    |   model.eval()                                    |               |
|    |   total_psnr = 0                                 |               |
|    |   with torch.no_grad():                           |               |
|    |       for (clean_images, _), (noisy_images, _) in  |               |
|    |           zip(clean_loader, noisy_loader):          |               |
|    |           clean_images = clean_images.to(device)    |               |
|    |           noisy_images = noisy_images.to(device)    |               |
|    |           output = model(noisy_images)              |               |
|    |           psnr = compute_psnr(clean_images, output) |               |
|    |           total_psnr += psnr                       |               |
|    |                                                   |               |
|    +---------------------------------------------------+               |
|                                                                        |
|    +---------------------------------------------------+               |
|    |                                                   |               |
|    |   avg_psnr = total_psnr / len(clean_loader)        |               |
|    |   end_time = time()                               |               |
|    |                                                   |               |
|    |   print(                                          |               |
|    |       f"Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f},     |               |
|    |       PSNR: {avg_psnr:.4f}, Time: {end_time-start_time:.2f}")  |               |
|    |                                                   |               |
|    |   if avg_psnr > best_psnr:                         |               |
|    |       best_psnr = avg_psnr                         |               |
|    |       torch.save(model.state_dict(), best_model_save_path)          |               |
|    |       print(f"Saved the best model at epoch {epoch+1}, PSNR: {avg_psnr:.4f}")  |               |
|    |                                                   |               |
|    |   if (epoch+1) % 10 == 0:                          |               |
|    |       torch.save(model.state_dict(), model_save_path.format(epoch))  |               |
|    |       print(f"Saved model at epoch {epoch+1}, PSNR: {avg_psnr:.4f}")  |               |
|    |                                                   |               |
|    |   model.train()                                   |               |
|    |                                                   |               |
|    +---------------------------------------------------+               |
|                                                                        |
+------------------------------------------------------------------------+
求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 19:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表