matlab 读取csv_利用Pytorch进行数据加载1--CSV文件的读取和显示

import os  # 文件处理模块,用于处理文件和目录
import torch  # pytorch的深度学习框架
import pandas as pd  #人脸识别库
from skimage import io, transform  # skimage为数字图像处理包,io用于读取、保存和显示图片或视频,transform用于几何变换和其他变换
import numpy as np  # 用于矩阵运算
imporrt matplotlib,pyplot as plt # matplotlib为一个2D绘图库,pyplot模块提供了类似于MATLAB的界面,特别是与IPython结合使用时
from torch.utils.data import Dataset, DataLoader # 该接口主要用来将自定义的数据读取接口的输出或者PyTorch已有的数据读取接口的输入按照batch size封装成Tensor
from torchvision import transforms, utils

# Ignore warnings
import warnings
warnings.filterwarnings("ignore")

plt.ion() # interactive mode

数据集的下载链接为:https://download.pytorch.org/tutorial/faces.zip

格式如下:

image_name,part_0_x,part_0_y,part_1_x,part_1_y,part_2_x, ... ,part_67_x,part_67_y
0805personali01.jpg,27,83,27,98, ... 84,134
1084239450_e76e00b7e7.jpg,70,236,71,257, ... ,128,312

CSV文件的读取如下:

landmarks_frame = pd.read_csv('data/faces/face_landmarks.csv')

n = 65
img_name = landmarks_frame.iloc[n, 0]
landmarks = landmarks_frame.iloc[n, 1:].as_matrix()
landmarks = landmarks.astype('float').reshape(-1, 2)

print('Image name: {}'.format(img_name))
print('Landmarks shape: {}'.format(landmarks.shape))
print('First 4 Landmarks: {}'.format(landmarks[:4]))

定义一个显示函数:

def show_landmarks(image, landmarks):
    """Show image with landmarks"""
    plt.imshow(image) # 显示图像
    plt.scatter(landmarks[:, 0], lamdmarks[:, 1], s = 10, marker = '.', c = 'r') # 显示特征点
    plt.pause(0.001)

plt.figure()
show_landmarks(io.imread(os.path.join('data/faces/', img_name)), landmarks)
plt.show()

显示结果如图所示:

a8cd0814d8e18dcb8b6bc035fc3b3951.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤使用CNN模型进行手写数字识别,包括CSV文件读取、保存和加载以及测试数据集和单张图片。 1. 导入所需的库: ```python import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import Dataset, DataLoader import pandas as pd import numpy as np from sklearn.model_selection import train_test_split ``` 2. 定义CNN模型: ```python 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.relu1 = nn.ReLU() self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2) self.conv2 = nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1) self.relu2 = nn.ReLU() self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2) self.fc1 = nn.Linear(7*7*64, 128) self.relu3 = nn.ReLU() self.fc2 = nn.Linear(128, 10) def forward(self, x): x = self.conv1(x) x = self.relu1(x) x = self.pool1(x) x = self.conv2(x) x = self.relu2(x) x = self.pool2(x) x = x.view(-1, 7*7*64) x = self.fc1(x) x = self.relu3(x) x = self.fc2(x) return x model = CNN() ``` 3. 读取CSV文件并准备数据集: ```python class CustomDataset(Dataset): def __init__(self, csv_path): self.data = pd.read_csv(csv_path, header=None) def __len__(self): return len(self.data) def __getitem__(self, index): label = self.data.iloc[index, 0] image = self.data.iloc[index, 1:].values.reshape(28, 28).astype(np.uint8) image = np.expand_dims(image, axis=0) return image, label csv_path = 'path/to/your/csv/file.csv' dataset = CustomDataset(csv_path) ``` 4. 划分训练集和测试集: ```python train_dataset, test_dataset = train_test_split(dataset, test_size=0.2, random_state=42) ``` 5. 创建数据加载器: ```python batch_size = 64 train_loader = DataLoader(train_dataset, batch_size=batch_size, shuffle=True) test_loader = DataLoader(test_dataset, batch_size=batch_size, shuffle=False) ``` 6. 定义损失函数和优化器: ```python criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) ``` 7. 训练模型: ```python num_epochs = 10 for epoch in range(num_epochs): train_loss = 0.0 model.train() for images, labels in train_loader: optimizer.zero_grad() outputs = model(images.float()) loss = criterion(outputs, labels) loss.backward() optimizer.step() train_loss += loss.item() * images.size(0) train_loss /= len(train_loader.dataset) print(f"Epoch: {epoch+1}/{num_epochs}, Training Loss: {train_loss:.4f}") ``` 8. 保存训练好的模型: ```python torch.save(model.state_dict(), 'path/to/save/model.pth') ``` 9. 加载已保存的模型并进行测试: ```python model.load_state_dict(torch.load('path/to/save/model.pth')) model.eval() test_loss = 0.0 correct = 0 with torch.no_grad(): for images, labels in test_loader: outputs = model(images.float()) loss = criterion(outputs, labels) test_loss += loss.item() * images.size(0) _, predicted = torch.max(outputs.data, 1) correct += (predicted == labels).sum().item() test_loss /= len(test_loader.dataset) accuracy = correct / len(test_loader.dataset) * 100 print(f"Test Loss: {test_loss:.4f}, Accuracy: {accuracy:.2f}%") ``` 10. 使用模型进行单张图片的预测: ```python from PIL import Image image_path = 'path/to/your/image.jpg' image = Image.open(image_path).convert('L') image = np.array(image) image = np.expand_dims(image, axis=0) image = torch.from_numpy(image).unsqueeze(0) output = model(image.float()) _, predicted = torch.max(output.data, 1) print(f"Predicted Label: {predicted.item()}") ``` 请将 `path/to/your/csv/file.csv` 和 `path/to/save/model.pth` 替换为您的实际文件路径。另外,确保您的CSV文件以及要测试的单张图片符合要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值