import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, Dataset class ConvNet(nn.Module): def __init__(self): super(ConvNet, self).__init__() self.conv1 = nn.Conv2d(in_channels=1, out_channels=32, kernel_size=3, stride=1, padding=1) self.relu = nn.ReLU() self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc1 = nn.Linear(32 * 14 * 14, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = self.conv1(x) x = self.relu(x) x = self.pool(x) x = x.view(-1, 32 * 14 * 14) x = self.fc1(x) x = self.relu(x) x = self.fc2(x) return x class MyDataset(Dataset): def __init__(self, data, target): self.data = data self.target = target def __getitem__(self, index): x = self.data[index] y = self.target[index] return x, y def __len__(self): return len(self.data) # 定义一些超参数 batch_size = 32 learning_rate = 0.001 epochs = 10 # 加载数据集 train_data = torch.randn(1000, 1, 28, 28) print(train_data) train_target = torch.randint(0, 10, (1000,)) print(train_target) train_dataset = MyDataset(train_data, train_target) train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) # 构建模型 model = ConvNet() # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=learning_rate) # 训练模型 for epoch in range(epochs): for batch_idx, (data, target) in enumerate(train_loader): optimizer.zero_grad() output = model(data) loss = criterion(output, target) loss.backward() optimizer.step() if batch_idx % 10 == 0: print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format( epoch, batch_idx * len(data), len(train_loader.dataset), 100. * batch_idx / len(train_loader), loss.item())) # 保存模型 # torch.save(model.state_dict(), 'convnet.pth')

时间: 2024-04-27 18:23:04 浏览: 169

这段代码是一个简单的卷积神经网络(ConvNet)在MNIST数据集上进行训练的代码。代码中定义了一个ConvNet类,它包含一个卷积层、ReLU激活函数、池化层和两个全连接层。同时,代码还定义了一个MyDataset类来加载数据集,以及一个DataLoader类来管理数据的批量处理。训练过程中使用了交叉熵损失函数和Adam优化器,将模型在数据集上训练了10个epochs。最后,代码还注释了一行保存模型的代码,可以将训练好的模型保存在本地。

相关问题

import torch import torch.nn.functional as F import torch.optim as optim from torchvision import transforms from torchvision import datasets from torch.utils. data import DataI oader 补全代码

下面是一个基本的 PyTorch MNIST 数据集训练代码示例,包括数据加载、模型定义、优化器和损失函数的定义以及训练过程。

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import transforms
from torchvision import datasets
from torch.utils.data import DataLoader

# 定义数据预处理
transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))
])

# 加载数据集
train_dataset = datasets.MNIST('data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST('data', train=False, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
test_loader = DataLoader(test_dataset, batch_size=64, shuffle=False)

# 定义模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = nn.Conv2d(10, 20, kernel_size=5)
        self.fc1 = nn.Linear(320, 50)
        self.fc2 = nn.Linear(50, 10)

    def forward(self, x):
        x = F.relu(F.max_pool2d(self.conv1(x), 2))
        x = F.relu(F.max_pool2d(self.conv2(x), 2))
        x = x.view(-1, 320)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return F.log_softmax(x, dim=1)

net = Net()

# 定义优化器和损失函数
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.5)
criterion = nn.CrossEntropyLoss()

# 训练模型
def train(epoch):
    net.train()
    for batch_idx, (data, target) in enumerate(train_loader):
        optimizer.zero_grad()
        output = net(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()
        if batch_idx % 10 == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                100. * batch_idx / len(train_loader), loss.item()))

def test():
    net.eval()
    test_loss = 0
    correct = 0
    with torch.no_grad():
        for data, target in test_loader:
            output = net(data)
            test_loss += criterion(output, target)
            pred = output.argmax(dim=1, keepdim=True)
            correct += pred.eq(target.view_as(pred)).sum().item()

    test_loss /= len(test_loader.dataset)
    print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
        test_loss, correct, len(test_loader.dataset),
        100. * correct / len(test_loader.dataset)))

for epoch in range(1, 5):
    train(epoch)
    test()

这是一个简单的卷积神经网络模型,用于对 MNIST 手写数字进行分类。训练过程中使用了交叉熵损失函数和随机梯度下降优化器。

import torch import torch.nn as nn import torch.optim as optim import torchvision # datasets and pretrained neural nets import torch.utils.data import torch.nn.functional as F import torchvision.transforms as transforms transform = transforms.Compose([transforms.ToTensor(), ]) trainset = torchvision.datasets.MNIST(root='.\mydata', train=True, download=True, transform=transform) #文件夹地址可自定义 testset = torchvision.datasets.MNIST(root='.\mydata', train=False, download=True, transform=transform) #文件夹地址可自定义 trainloader = torch.utils.data.DataLoader(trainset, batch_size =32, shuffle=True) testloader = torch.utils.data.DataLoader(testset, batch_size=32, shuffle=False)写一个构建网络定义损失函数,优化器训练 迭代次数为10次 模型评测尝试将数据集更改为FashionMNIST或者CIFIR10再训练模型,或对比卷积神经网络和全连接神经网络模型的预测准确度,或尝试数据增强方法的代码

好的,这里是一个简单的代码示例,包括构建网络、定义损失函数、优化器、训练和评估模型的步骤。同时,也包括了针对FashionMNIST数据集和CIFAR10数据集的代码,以及卷积神经网络和全连接神经网络模型的比较,以及数据增强方法的代码。

import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torch.utils.data
import torch.nn.functional as F
import torchvision.transforms as transforms

# 数据集选项
dataset = 'MNIST'  # 可以选择'MNIST', 'FashionMNIST'或者'CIFAR10'
data_root = './data'  # 数据集存储的文件夹地址

# 构建网络
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 28 * 28)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 定义损失函数和优化器
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.001, momentum=0.9)

# 加载数据集
if dataset == 'MNIST':
    trainset = torchvision.datasets.MNIST(root=data_root, train=True, download=True, transform=transforms.ToTensor())
    testset = torchvision.datasets.MNIST(root=data_root, train=False, download=True, transform=transforms.ToTensor())
elif dataset == 'FashionMNIST':
    trainset = torchvision.datasets.FashionMNIST(root=data_root, train=True, download=True, transform=transforms.ToTensor())
    testset = torchvision.datasets.FashionMNIST(root=data_root, train=False, download=True, transform=transforms.ToTensor())
elif dataset == 'CIFAR10':
    trainset = torchvision.datasets.CIFAR10(root=data_root, train=True, download=True, transform=transforms.ToTensor())
    testset = torchvision.datasets.CIFAR10(root=data_root, train=False, download=True, transform=transforms.ToTensor())
else:
    raise ValueError('Invalid dataset name')

trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)
testloader = torch.utils.data.DataLoader(testset, batch_size=32, shuffle=False)

# 训练模型
for epoch in range(10):
    running_loss = 0.0
    for i, data in enumerate(trainloader, 0):
        inputs, labels = data
        optimizer.zero_grad()
        outputs = net(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        running_loss += loss.item()
        if i % 100 == 99:
            print('[%d, %5d] loss: %.3f' % (epoch + 1, i + 1, running_loss / 100))
            running_loss = 0.0

print('Finished Training')

# 评估模型
correct = 0
total = 0
with torch.no_grad():
    for data in testloader:
        images, labels = data
        outputs = net(images)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print('Accuracy of the network on the 10000 test images: %d %%' % (100 * correct / total))

针对FashionMNIST数据集和CIFAR10数据集的代码仅需要改变数据集的名称和地址即可。卷积神经网络和全连接神经网络模型的比较可以使用以下代码:

# 定义卷积神经网络
class ConvNet(nn.Module):
    def __init__(self):
        super(ConvNet, self).__init__()
        self.conv1 = nn.Conv2d(1, 16, kernel_size=5, padding=2)
        self.conv2 = nn.Conv2d(16, 32, kernel_size=5, padding=2)
        self.fc1 = nn.Linear(32 * 7 * 7, 256)
        self.fc2 = nn.Linear(256, 10)

    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.max_pool2d(x, 2)
        x = F.relu(self.conv2(x))
        x = F.max_pool2d(x, 2)
        x = x.view(-1, 32 * 7 * 7)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# 定义全连接神经网络
class FCNet(nn.Module):
    def __init__(self):
        super(FCNet, self).__init__()
        self.fc1 = nn.Linear(28 * 28, 128)
        self.fc2 = nn.Linear(128, 10)

    def forward(self, x):
        x = x.view(-1, 28 * 28)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

if dataset == 'MNIST' or dataset == 'FashionMNIST':
    net = FCNet()
elif dataset == 'CIFAR10':
    net = ConvNet()
else:
    raise ValueError('Invalid dataset name')

# 训练和评估模型的代码和之前相同

最后,以下是数据增强的代码示例,可以在训练数据集上应用随机的图像变换,从而增加数据集的多样性和泛化性能。

# 数据增强
train_transform = transforms.Compose([
    transforms.RandomCrop(28, padding=4),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
])

trainset = torchvision.datasets.MNIST(root=data_root, train=True, download=True, transform=train_transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True)

# 训练模型的代码和之前相同

需要注意的是,在评估模型时,不应该使用数据增强,因为这会导致测试结果不准确。

向AI提问 loading 发送消息图标

相关推荐

修改一下这段代码在pycharm中的实现,import pandas as pd import numpy as np from sklearn.model_selection import train_test_split import torch import torch.nn as nn import torch.nn.functional as F import torch.optim as optim #from torchvision import datasets,transforms import torch.utils.data as data #from torch .nn:utils import weight_norm import matplotlib.pyplot as plt from sklearn.metrics import precision_score from sklearn.metrics import recall_score from sklearn.metrics import f1_score from sklearn.metrics import cohen_kappa_score data_ = pd.read_csv(open(r"C:\Users\zhangjinyue\Desktop\rice.csv"),header=None) data_ = np.array(data_).astype('float64') train_data =data_[:,:520] train_Data =np.array(train_data).astype('float64') train_labels=data_[:,520] train_labels=np.array(train_data).astype('float64') train_data,train_data,train_labels,train_labels=train_test_split(train_data,train_labels,test_size=0.33333) train_data=torch.Tensor(train_data) train_data=torch.LongTensor(train_labels) train_data=train_data.reshape(-1,1,20,26) train_data=torch.Tensor(train_data) train_data=torch.LongTensor(train_labels) train_data=train_data.reshape(-1,1,20,26) start_epoch=1 num_epoch=1 BATCH_SIZE=70 Ir=0.001 classes=('0','1','2','3','4','5') device=torch.device("cuda"if torch.cuda.is_available()else"cpu") torch.backends.cudnn.benchmark=True best_acc=0.0 train_dataset=data.TensorDataset(train_data,train_labels) test_dataset=data.TensorDataset(train_data,train_labels) train_loader=torch.utills.data.DataLoader(dtaset=train_dataset,batch_size=BATCH_SIZE,shuffle=True) test_loader=torch.utills.data.DataLoader(dtaset=train_dataset,batch_size=BATCH_SIZE,shuffle=True)

import torch import torch.nn as nn import torch.optim as optim import numpy as np import pandas as pd from sklearn.metrics import f1_score, roc_auc_score, recall_score, precision_score import os # 定义全局设备对象[5,7](@ref) device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print(f"当前使用设备:{device}") # 定义全连接神经网络模型(GPU适配版) class FullyConnectedNN(nn.Module): def __init__(self): super(FullyConnectedNN, self).__init__() self.fc1 = nn.Linear(11, 32) self.relu1 = nn.ReLU() self.dropout1 = nn.Dropout(0.5) self.fc2 = nn.Linear(32, 16) self.relu2 = nn.ReLU() self.dropout2 = nn.Dropout(0.5) self.fc3 = nn.Linear(16, 1) self.sigmoid = nn.Sigmoid() def forward(self, x): x = self.fc1(x) x = self.relu1(x) x = self.dropout1(x) x = self.fc2(x) x = self.relu2(x) x = self.dropout2(x) x = self.fc3(x) x = self.sigmoid(x) return x # 从CSV文件中加载数据(GPU优化版) def load_data(file_path): data = pd.read_csv(file_path) X = torch.tensor(data.iloc[:, :11].values, dtype=torch.float32).to(device) y = torch.tensor(data.iloc[:, 11].values, dtype=torch.float32).view(-1, 1).to(device) return X, y # 训练模型(GPU加速版) def train_model(model, train_X, train_y, criterion, optimizer, num_epochs, batch_size=256): model.train() num_samples = len(train_X) # 数据预取优化[8](@ref) dataset = torch.utils.data.TensorDataset(train_X, train_y) dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, num_workers=4, pin_memory=False) for epoch in range(num_epochs): running_loss = 0.0 for inputs, labels in dataloader: optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item()

'''Training script. ''' import os from tqdm import tqdm import torch import torch.nn as nn from torch.utils.data import DataLoader from torch.optim import Adam, lr_scheduler from torchsummary import summary from torchvision import transforms import torch.distributed as dist import torch.multiprocessing as mp from models.resnet50 import ResNet50 from runtime_args import args from load_dataset import LoadDataset from plot import plot_loss_acc from helpers import calculate_accuracy device = torch.device("cuda:0" if torch.cuda.is_available() and args.device == 'gpu' else 'cpu') if not os.path.exists(args.graphs_folder) : os.mkdir(args.graphs_folder) model_save_folder = 'resnet_cbam/' if args.use_cbam else 'resnet/' if not os.path.exists(model_save_folder) : os.mkdir(model_save_folder) def train(gpu, args): '''Init models and dataloaders and train/validate model. ''' rank = args.rank * args.gpus + gpu world_size = args.gpus * args.nodes dist.init_process_group(backend='nccl', init_method='env://', world_size=world_size, rank=rank) model = ResNet50(image_depth=args.img_depth, num_classes=args.num_classes, use_cbam=args.use_cbam) torch.cuda.set_device(gpu) model.cuda(gpu) optimizer = Adam(model.parameters(), lr=args.learning_rate) lr_decay = lr_scheduler.ExponentialLR(optimizer, gamma=args.decay_rate) criterion = torch.nn.CrossEntropyLoss().cuda(gpu) summary(model, (3, 224, 224)) model = nn.parallel.DistributedDataParallel(model, device_ids=[gpu]) train_dataset = LoadDataset(dataset_folder_path=args.data_folder, image_size=args.img_size, image_depth=args.img_depth, train=True, transform=transforms.ToTensor()) test_dataset = LoadDataset(dataset_folder_path=args.data_folder, image_size=args.img_size, image_depth=args.img_depth, train=False, transform=transforms.ToTensor()) train_sampler = torch.utils.data.distributed.DistributedSample

import os import matplotlib. pyplot as plt #%matplotlib inline import numpy as np import torch from torch import nn import torch. optim as optim import torchvision #pip install torchvision from torchvision import transforms, models, datasets #https://pytorch.org/docs/stable/torchvision/index.html import imageio import time import warnings warnings. filterwarnings("ignore") import random import sys import copy import json from PIL import Image data_dir = '.\preconditioning/left' #数据预处理 data_tranform ={ 'train': transforms.Compose([ transforms.Resize([224,224]), transforms.RandomRotation(45), transforms.CenterCrop(200), transforms.ToTensor(), transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]) ]), 'valid': transforms.Compose([ transforms.Resize([224,224]), transforms.ToTensor(), transforms.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]) ]) } batch_size = 512 image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir),data_tranform[x])for x in ['train','valid']} dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],batch_size=batch_size,shutil=True)for x in ['train','valid']} dataset_size = {x: len(image_datasets[x])for x in ['train','valid']} class_names = image_datasets['traim'].classes上述代码爆出了以错误,请给出解决方案Traceback (most recent call last): File "D:\我的文档\Python\PythonProject2\TXSB\Lean.py", line 43, in <module> dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],batch_size=batch_size,shutil=True)for x in ['train','valid']} File "D:\我的文档\Python\PythonProject2\TXSB\Lean.py", line 43, in <dictcomp> dataloaders = {x: torch.utils.data.DataLoader(image_datasets[x],batch_size=batch_size,shutil=True)for x in ['train','valid']} TypeError: __init__() got an unexpected keyword argument 'shutil'

# Import necessary libraries import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms import matplotlib.pyplot as plt from torch.utils.data import DataLoader, random_split import torch.nn.functional as F # Define data transformations transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize((0.5,0.5,0.5), (0.5,0.5,0.5)) ]) # 使用原始字符串处理Windows路径和空格 dataset_path = r"C:\Users\29930\Desktop\IOS图像\结构参数图" # 加载完整数据集 full_dataset = datasets.ImageFolder( root=dataset_path, transform=transform ) # 按8:2比例划分 train_size = int(0.8 * len(full_dataset)) test_size = len(full_dataset) - train_size train_dataset, test_dataset = random_split( full_dataset, [train_size, test_size] ) # Create data loaders for batching and shuffling train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=64, shuffle=False) # Define the CNN Model class CNN(nn.Module): def __init__(self, input_channels=3, img_size=224): # 添加尺寸参数 super().__init__() self.conv1 = nn.Conv2d(input_channels,32,kernel_size=3,stride=1,padding=1) self.pool = nn.MaxPool2d(2,2) self.conv2 = nn.Conv2d(32,64,3,1,1) # 自动计算展平维度 with torch.no_grad(): self.flatten_size = 64 * (img_size//4) * (img_size//4) self.fc1 = nn.Linear(self.flatten_size,128) self.fc2 = nn.Linear(128,10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = x.view(-1, self.flatten_size) x = F.relu(self.fc1(x)) x = self.fc2(x) return x # Instantiate the model model = CNN() print(model) # Define the loss function and optimizer criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # Train the model num_epochs = 10 for epoch in range(num_epochs): running_loss =0.0 for i, data in enumerate(train_loader,0): inputs, labels = data optimizer.zero_grad() outputs = model(inputs) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() if i % 100==99: print(f'Epoch {epoch + 1}, Batch {i + 1}, Loss: {running_loss /100:.3f}') running_loss = 0.0 print('Finished Training') correct =0 total =0 with torch.no_grad(): for data in test_loader: images, labels = data outputs = model(images) _, predicted = torch.max(outputs.data,1) total += labels.size(0) correct += (predicted == labels).sum().item() print(f'Accuracy of the model on the test set: {100 * correct / total:.2f}%')增加AUC可视化和Grad-CAM+++可视化

csdnimport sys import os import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader, RandomSampler from torchvision import transforms from PIL import Image import threading from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QComboBox, QPushButton, \ QProgressBar, QLineEdit, QFileDialog from torch.cuda.amp import GradScaler, autocast class ResidualBlock(nn.Module): def __init__(self, in_channels): super(ResidualBlock, self).__init__() self.block = nn.Sequential( nn.ReflectionPad2d(1), nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=0), nn.InstanceNorm2d(in_channels), nn.ReLU(inplace=True), nn.ReflectionPad2d(1), nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=0), nn.InstanceNorm2d(in_channels) ) def forward(self, x): return x + self.block(x) class Generator(nn.Module): def __init__(self, input_nc, output_nc, n_residual_blocks=6): super(Generator, self).__init__() model = [ nn.ReflectionPad2d(3), nn.Conv2d(input_nc, 64, kernel_size=7, stride=1, padding=0), nn.InstanceNorm2d(64), nn.ReLU(inplace=True) ] in_features = 64 out_features = in_features * 2 for _ in range(2): model += [ nn.Conv2d(in_features, out_features, kernel_size=3, stride=2, padding=1), nn.InstanceNorm2d(out_features), nn.ReLU(inplace=True) ] in_features = out_features for _ in range(n_residual_blocks): model += [ResidualBlock(in_features)] out_features = in_features // 2 for _ in range(2): model += [ nn.ConvTranspose2d(in_features, out_features, kernel_size=3, stride=2, padding=1, output_padding=1)

模仿下面代码,生成一个用于诊断轴承故障类型的神经网络,要求输入信号为电流信号,输出结果要标注每一种故障类型的诊断概率,并在代码中表明数据输入的位置。import pip import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader import numpy as np from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler class BearingDataset(Dataset): def __init__(self, features, labels): self.features = torch.tensor(features, dtype=torch.float32) self.labels = torch.tensor(labels, dtype=torch.long) def __len__(self): return len(self.labels) def __getitem__(self, idx): return self.features[idx], self.labels[idx] class BearingCNN(nn.Module): def __init__(self, num_classes): super(BearingCNN, self).__init__() self.conv1 = nn.Conv1d(1, 16, kernel_size=3, stride=1, padding=1) self.relu1 = nn.ReLU() self.pool1 = nn.MaxPool1d(kernel_size=2, stride=2) self.conv2 = nn.Conv1d(16, 32, kernel_size=3, stride=1, padding=1) self.relu2 = nn.ReLU() self.pool2 = nn.MaxPool1d(kernel_size=2, stride=2) self.fc1 = nn.Linear(32 * (len(data[0]) // 4), 128) self.relu3 = nn.ReLU() self.fc2 = nn.Linear(128, num_classes) def forward(self, x): x = x.unsqueeze(1) # 添加通道维度 x = self.pool1(self.relu1(self.conv1(x))) x = self.pool2(self.relu2(self.conv2(x))) x = x.view(x.size(0), -1) x = self.relu3(self.fc1(x)) x = self.fc2(x) return x # 生成示例数据,假设每个样本有 100 个特征,共有 1000 个样本,分为 4 类故障 num_samples = 1000 num_features = 100 num_classes = 4 data = np.random.randn(num_samples, num_features) labels = np.random.randint(0, num_classes, num_samples) # 数据标准化 scaler = StandardScaler() data = scaler.fit_transform(data) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42) # 创建数据集和数据加载train_dataset = BearingDataset(X_train, y_train) test_dataset = BearingDatase

使用MNIST数据集中的0,1数据完成logistic regression 任务 导入相关包 In [1]: import torch import torchvision as tv import torchvision.transforms as transforms import torch.nn as nn In [2]: # 定义是否使用GPU device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # 定义数据预处理方式 transform = transforms.ToTensor() 利用框架自带数据集读取方式读取 MNIST数据集 In [3]: # download 第一次可设置为Ture trainset = tv.datasets.MNIST( root='./data/', train=True, download=True, transform=transform) 从训练集中取出0、1标签的数据构成此次任务的训练集(train_input,train_label) In [4]: train_input = [] train_label = [] for data, label in trainset: if label == 0 or label == 1: train_input.append(data) train_label.append(label) 创建自己的训练数据集,需要补充完成 In [5]: class TensorDataset(torch.utils.data.Dataset): """ 创建自己的dataset类 继承torch.utils.data.DatasetDataset wrapping data and target tensors. Each sample will be retrieved by indexing both tensors along the first dimension. Arguments: data_tensor (Tensor): contains sample data. target_tensor (Tensor): contains sample targets (labels). """ ​ def __init__(self, data_tensor, target_tensor): self.data_tensor = data_tensor self.target_tensor = target_tensor # 这个方法是必须要有的,用于按照索引读取每个元素的具体内容 def __getitem__(self, index): return self.data_tensor[index], self.target_tensor[index] # #return很关键,return回哪些内容,那么我们在训练时循环读取每个batch时, # 就能获得哪些内容 ##这个函数也必须要写,它返回的是数据集的长度 def __len__(self): return self.data_tensor.size(0) 定义训练批处理数据 In [ ]: # batch_size 根据自己计算资源设计,shuffle设置为True,查询设置的原因。 trainloader = torch.utils.data.DataLoader( TensorDataset(train_input, train_label), batch_size = 128, shuffle = True, ) 利用pytorch框架的nn.Module 模块完成logistic regression class logistic_regression(nn.Module): ''' 逻辑回归模型 ''' def __init__(self): super(logistic_regression, self).__init__() " 添加logistic regression层 " def forward(self,

import torch import torch.nn as nn import torch.optim as optim import torchvision.datasets as datasets import torchvision.transforms as transforms # 定义超参数 batch_size = 64 learning_rate = 0.001 num_epochs = 10 # 定义数据预处理 transform = transforms.Compose([ transforms.ToTensor(), # 转换为Tensor类型 transforms.Normalize((0.1307,), (0.3081,)) # 标准化,使得均值为0,标准差为1 ]) # 加载MNIST数据集 train_dataset = datasets.MNIST(root='C:/MNIST', train=True, transform=transform, download=True) test_dataset = datasets.MNIST(root='C:/MNIST', train=False, transform=transform, download=True) train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False) # 定义CNN模型 class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() self.conv1 = nn.Conv2d(1, 32, kernel_size=3, stride=1, padding=1) self.bn1 = nn.BatchNorm2d(32) self.relu1 = nn.ReLU() self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1) self.bn2 = nn.BatchNorm2d(64) self.relu2 = nn.ReLU() self.pool = nn.MaxPool2d(kernel_size=2, stride=2) self.fc1 = nn.Linear(64 * 7 * 7, 128) self.relu3 = nn.ReLU() self.fc2 = nn.Linear(128, 10) def forward(self, x): out = self.conv1(x) out = self.bn1(out) out = self.relu1(out) out = self.conv2(out) out = self.bn2(out) out = self.relu2(out) out = self.pool(out) out = out.view(-1, 64 * 7 * 7) out = self.fc1(out) out = self.relu3(out) out = self.fc2(out) return out # 实例化模型定义损失函数优化器 model = CNN() criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=learning_rate) # 训练模型 total_step = len(train_loader) for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): # 前向传播 outputs = model(images) loss = criterion(outputs, labels) # 反向传播和优化 optimizer.zero_grad() loss.backward() optimizer.step() # 每100batch打印一次训练信息 if (i+1) % 100 == 0: print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}' .format(epoch+1, num_epochs, i+1, total_step, loss.item())) # 测试模型 model.eval() # 进入测试模式,关闭Dropout和BatchNormalization层 with torch.no_grad(): correct = 0 total = 0 for images, labels in test_loader: outputs = model(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum().item() print('Test Accuracy of the model on the 10000 test images: {} %'.format(100 * correct / total))运行一下此代码

大学生入口

最新推荐

recommend-type

qtz40塔式起重机总体及塔身有限元分析法设计().zip

qtz40塔式起重机总体及塔身有限元分析法设计().zip
recommend-type

iOS开发中的HTTP请求方法演示

在iOS开发中,进行HTTP请求以从服务器获取数据是常见的任务。在本知识点梳理中,我们将详细探讨如何利用HTTP向服务器请求数据,涵盖同步GET请求、同步POST请求、异步GET请求以及异步POST请求,并将通过示例代码来加深理解。 ### 同步GET请求 同步GET请求是指客户端在发起请求后将阻塞当前线程直到服务器响应返回,期间用户界面无法进行交互。这种做法不推荐在主线程中使用,因为会造成UI卡顿。下面是一个使用`URLSession`进行同步GET请求的示例代码。 ```swift import Foundation func syncGETRequest() { guard let url = URL(string: "http://www.example.com/api/data") else { return } var request = URLRequest(url: url) request.httpMethod = "GET" let task = URLSession.shared.dataTask(with: request) { data, response, error in if let error = error { print("Error: \(error)") return } if let httpResponse = response as? HTTPURLResponse, (200...299).contains(httpResponse.statusCode) { guard let mimeType = httpResponse.mimeType, mimeType == "application/json" else { print("Invalid content-type") return } guard let data = data else { print("No data") return } do { let json = try JSONSerialization.jsonObject(with: data, options: []) print("Data received: \(json)") } catch { print("JSONSerialization failed: \(error)") } } else { print("HTTP Error: \(response?.description ?? "No response")") } } task.resume() } // 调用函数 syncGETRequest() ``` ### 同步POST请求 同步POST请求与GET类似,但是在请求方法、请求体以及可能的参数设置上有所不同。下面是一个同步POST请求的示例代码。 ```swift import Foundation func syncPOSTRequest() { guard let url = URL(string: "http://www.example.com/api/data") else { return } var request = URLRequest(url: url) request.httpMethod = "POST" let postData = "key1=value1&key2=value2" request.httpBody = postData.data(using: .utf8) let task = URLSession.shared.dataTask(with: request) { data, response, error in // 同GET请求处理方式类似... } task.resume() } // 调用函数 syncPOSTRequest() ``` ### 异步GET请求 异步请求不会阻塞主线程,因此可以提升用户体验。在iOS开发中,可以使用`URLSession`来发起异步请求。 ```swift import Foundation func asyncGETRequest() { guard let url = URL(string: "http://www.example.com/api/data") else { return } var request = URLRequest(url: url) request.httpMethod = "GET" URLSession.shared.dataTask(with: request) { data, response, error in // 同步GET请求处理方式类似... }.resume() } // 调用函数 asyncGETRequest() ``` ### 异步POST请求 异步POST请求的代码结构与GET请求类似,区别主要在于HTTP方法和请求体的设置。 ```swift import Foundation func asyncPOSTRequest() { guard let url = URL(string: "http://www.example.com/api/data") else { return } var request = URLRequest(url: url) request.httpMethod = "POST" let postData = "key1=value1&key2=value2" request.httpBody = postData.data(using: .utf8) URLSession.shared.dataTask(with: request) { data, response, error in // 同步GET请求处理方式类似... }.resume() } // 调用函数 asyncPOSTRequest() ``` ### 注意事项 - **网络权限**:在实际项目中,需要在`Info.plist`中添加相应的网络权限。 - **错误处理**:示例代码中展示了基本的错误处理流程,但在实际开发中应详细处理各种可能的网络错误。 - **线程安全**:如果在主线程之外的线程更新UI,需要确保线程安全。 - **请求超时**:在网络请求中设置合理的超时时间以避免长时间无响应。 - **状态码处理**:服务器响应的状态码需要适当处理,如200表示成功,4xx表示客户端错误,5xx表示服务器端错误。 ### 结语 通过上述示例代码,新手开发者可以快速理解如何在iOS项目中使用HTTP请求与服务器进行数据交互。无论是同步还是异步请求,重要的是要根据实际应用场景合理选择请求方式,并严格遵循最佳实践,确保应用的性能和用户体验。
recommend-type

【精准测试】:确保分层数据流图准确性的完整测试方法

# 摘要 分层数据流图(DFD)作为软件工程中描述系统功能和数据流动的重要工具,其测试方法论的完善是确保系统稳定性的关键。本文系统性地介绍了分层DFD的基础知识、测试策略与实践、自动化与优化方法,以及实际案例分析。文章详细阐述了测试的理论基础,包括定义、目的、分类和方法,并深入探讨了静态与动态测试方法以及测试用
recommend-type

错误: 找不到或无法加载主类 org.springblade.Application 原因: java.lang.ClassNotFoundException: org.springblade.Application

<think>好的,我现在需要帮助用户解决Java程序中出现的ClassNotFoundException,特别是关于org.springblade.Application类的找不到的问题。用户提到这是SpringBoot的主类未找到的情况。首先,我需要回忆一下这个异常的常见原因和解决方法。 根据之前的引用内容,ClassNotFoundException通常与依赖配置或类路径有关。例如,引用[2]指出这可能是因为依赖配置不正确或类路径设置问题,而引用[3]提到版本不统一也可能导致此类问题。此外,主类未找到还可能是因为打包配置不正确,比如在Maven或Gradle中没有正确指定主类,或者在构
recommend-type

个人作品集展示:HTML文件夹压缩处理

根据给定的文件信息,我们可以推断出以下IT知识内容。 ### 知识点一:HTML文件夹的作用与结构 HTML文件夹通常用于存放网站的所有相关文件,包括HTML文件、CSS样式表、JavaScript脚本、图像文件以及其他资源文件。这个文件夹的结构应该清晰且有组织,以便于开发和维护。HTML文件是网页内容的骨架,它通过标签(Tag)来定义内容的布局和结构。 #### HTML标签的基本概念 HTML标签是构成网页的基石,它们是一些用尖括号包围的词,如`<html>`, `<head>`, `<title>`, `<body>`等。这些标签告诉浏览器如何显示网页上的信息。例如,`<img>`标签用于嵌入图像,而`<a>`标签用于创建超链接。HTML5是最新版本的HTML,它引入了更多的语义化标签,比如`<article>`, `<section>`, `<nav>`, `<header>`, `<footer>`等,这有助于提供更丰富的网页结构信息。 #### 知识点二:使用HTML构建投资组合(portfolio) “portfolio”一词在IT行业中常常指的是个人或公司的作品集。这通常包括了一个人或组织在特定领域的工作样本和成就展示。使用HTML创建“portfolio”通常会涉及到以下几个方面: - 设计布局:决定页面的结构,如导航栏、内容区域、页脚等。 - 网页内容的填充:使用HTML标签编写内容,可能包括文本、图片、视频和链接。 - 网站响应式设计:确保网站在不同设备上都能有良好的浏览体验,这可能涉及到使用CSS媒体查询和弹性布局。 - CSS样式的应用:为HTML元素添加样式,使网页看起来更加美观。 - JavaScript交互:添加动态功能,如图片画廊、滑动效果或导航菜单。 #### 知识点三:GitHub Pages与网站托管 标题中出现的"gh-pages"表明涉及的是GitHub Pages。GitHub Pages是GitHub提供的一个静态网站托管服务。用户可以使用GitHub Pages托管他们的个人、组织或者项目的页面。它允许用户直接从GitHub仓库部署和发布网站。 #### 知识点四:项目命名与管理 在压缩包子文件的文件名称列表中,出现了"portfolio-gh-pages",这说明项目有一个特定的命名规范。文件夹或项目名称应该简洁明了,能够反映项目内容或者用途。在IT项目管理中,良好的命名习惯有助于团队成员更快地理解项目的性质,同时也方便版本控制和代码维护。 #### 总结 在信息技术领域,使用HTML构建一个投资组合网站是一个常见的任务。它不仅可以展示个人或公司的技能和作品,还可以作为与潜在客户或雇主交流的平台。理解HTML标签的使用、网页设计的基本原则、响应式设计以及网站托管服务,对于制作一个专业且吸引人的投资组合至关重要。此外,良好的项目命名和文件管理习惯也是IT专业人士应该具备的基本技能之一。
recommend-type

【版本控制】:分层数据流图的高效维护与变更管理

# 摘要 本文系统地探讨了版本控制和分层数据流图设计的重要性和应用实践。第一章强调版本控制的基础知识和其在软件开发生命周期中的关键作用。第二章详细介绍了分层数据流图的设计原理,包括基本概念、设计方法和表示技巧,以及如何通过这些图解高效地管理和沟通软件设计。第三章探讨了版本控制系统的选择与配置,比较了不同类型系统的特点,并提供了配置主流系统的实际案例。第四章重点讨论分层数据流图的变更管理流程,阐述
recommend-type

如何用tiff获取等温线,在qgis中,我的qgis是英文版的

要在英文版 QGIS 中通过 TIFF 文件生成等温线,可以按以下步骤操作: ### Step 1: Load the TIFF Data 1. Open QGIS and click on **Layer** > **Add Layer** > **Add Raster Layer**. 2. In the dialog box that appears, browse for your TIFF file, then click **Open** to load it into QGIS. ### Step 2: Examine Value Range 1. Right-click o
recommend-type

新增临界天数与利率表显示的定期存款利息计算器

标题中提到的“定期存款转存利息计算器1.4”表明这是一个关于银行定期存款利息计算的软件版本更新。在理财投资领域,定期存款是一种常见的金融工具,用户将钱存入银行并约定一段时间后取款,期间银行会根据约定的利率支付利息。然而,定期存款的利息通常不是一次性支付,而是在存款期满时一次性计算并加入本金,这种机制称为复利。用户在存款到期后,可能希望继续转存,这就需要对利息进行再投资的计算。 描述中提到,新版本1.4在1.0的基础上进行了功能强化,新增了两个重要功能: 1. “临界天数查询”功能:这可能是指用户可以查询特定存款期限在不同利率下能够获得收益的临界天数。例如,在一年期存款到期前多少天转存,可以确保存款到期后获得的利息不减少或有所增加。对于银行理财产品的投资决策来说,了解这一点是十分重要的。 2. “利率表显示”功能:用户可以查看和比较不同存款期限或不同条件下的利率,这有助于用户根据自己的需要和市场利率的变化,做出更为合理的资金安排和投资决策。 另外,描述中提到即使没有找到外部的“利率表文件”,软件也不会死机,这表明软件的容错性有所增强。这也说明1.4版本在用户体验和稳定性上做了改进,提高了软件的健壮性和用户的满意度。 在标签中,提及了“mscomct2.oxc”这一组件。这是一个ActiveX控件,用于在Windows平台上提供更丰富的用户界面元素,尤其是用于旧版的Visual Basic或Visual C++应用程序。这暗示该软件可能是一个较老的Windows应用程序,需要用户安装这个组件以便正常运行。 文件名称列表中的“定期存款转存利息计算器1.4.exe”是该软件的可执行文件,用户通过运行这个文件来启动计算器软件。而“intr.txt”可能是软件的使用说明文档,提供软件的安装指导和操作说明。由于文件名后缀为.txt,这表明它是一个文本文件。 综合以上信息,我们可以得知,这个版本的“定期存款转存利息计算器”在功能上有所提升,增加了一些用户便捷性和容错性的设计。对于希望管理自己定期存款并从中获取最大收益的用户来说,这样的工具无疑是非常有帮助的。需要注意的是,由于软件可能是较老版本的Windows应用程序,用户在使用前可能需要确保系统兼容性,并安装必要的组件。此外,定期存款产品的选择应当基于个人的财务规划和风险偏好,计算工具仅能提供参考数据,并不能代替个人对金融市场的判断和专业财经顾问的建议。
recommend-type

【敏捷适配】:在敏捷开发中维持分层数据流图的有效性

# 摘要 敏捷开发与分层数据流图(DFD)的融合是当前软件工程领域关注的热点。本文首先概述了敏捷适配与DFD的基本概念,然后探讨了敏捷开发的核心原则与DFD的理论模型,以及在敏捷环境中DFD的适应性。本文接着分析了维护DFD的实践策略,包括工具和方法的使用、与敏捷迭代过程的结合,以及跨团队协作的机制。通过案例研究,本文提供了DFD
recommend-type

请对程序中的代码进行注释

### 如何在不同编程语言中为代码添加注释的最佳实践 #### 单行注释 大多数现代编程语言支持通过特定符号来标记单行注释。例如,在C风格的语言(如Java、JavaScript、C++)中,`//`用于表示单行注释[^1]。 ```java int a = 5; // 这是一个整数变量声明 ``` Python 使用 `#` 来定义单行注释: ```python a = 5 # 这是一个整数变量声明 ``` #### 多行注释 对于多行注释,许多语言提供了专门的语法。例如,在 C 风格语言中可以使用 `/* */` 将一段文本包裹起来形成多行注释[^2]。 ```c++ /*
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部