Spaces:
Build error
Build error
| import numpy as np | |
| import torch | |
| import torch.nn as nn | |
| import torch.optim as optim | |
| import torchvision.transforms as transforms | |
| from PIL import Image | |
| # Define the ConvAutoencoder model structure | |
| class ConvAutoencoder(nn.Module): | |
| def __init__(self): | |
| super(ConvAutoencoder, self).__init__() | |
| # Encoder | |
| self.encoder = nn.Sequential( | |
| nn.Conv2d(1, 32, 3, stride=2, padding=1), | |
| nn.ReLU(), | |
| nn.Conv2d(32, 64, 3, stride=2, padding=1), | |
| nn.ReLU() | |
| ) | |
| # Decoder | |
| self.decoder = nn.Sequential( | |
| nn.ConvTranspose2d(64, 32, 2, stride=2, padding=1), | |
| nn.ReLU(), | |
| nn.ConvTranspose2d(32, 1, 2, stride=2, padding=1), | |
| nn.Sigmoid() | |
| ) | |
| def forward(self, x): | |
| x = self.encoder(x) | |
| x = self.decoder(x) | |
| return x | |
| # Load and resize the training slice | |
| processed_data_path = 'BraTS20_Training_001_best_slice.npy' # Replace with your actual path | |
| best_slice = np.load(processed_data_path) | |
| # Resize the best slice to (256, 256) | |
| transform = transforms.Compose([ | |
| transforms.ToPILImage(), | |
| transforms.Resize((256, 256)), # Ensures fixed input size | |
| transforms.ToTensor() | |
| ]) | |
| # Apply transformation to ensure correct size | |
| best_slice = transform(best_slice).unsqueeze(0) # Shape: [1, 1, 256, 256] | |
| # Initialize model, loss function, and optimizer | |
| device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | |
| model = ConvAutoencoder().to(device) | |
| criterion = nn.MSELoss() | |
| optimizer = optim.Adam(model.parameters(), lr=1e-3) | |
| # Training loop | |
| num_epochs = 100 | |
| best_slice = best_slice.to(device) | |
| for epoch in range(num_epochs): | |
| model.train() | |
| optimizer.zero_grad() | |
| output = model(best_slice) | |
| loss = criterion(output, best_slice) | |
| loss.backward() | |
| optimizer.step() | |
| if (epoch + 1) % 10 == 0: | |
| print(f"Epoch [{epoch + 1}/{num_epochs}], Loss: {loss.item():.4f}") | |
| # Save the trained model weights | |
| torch.save(model.state_dict(), "conv_autoencoder_model.pth") | |
| print("Model training complete and saved as conv_autoencoder_model.pth") | |