使用mindspore实现对FashionMnist数据集图像分类的完整代码,包括绘制训练集和测试集上的loss曲线
时间: 2024-10-28 17:12:15 浏览: 35
MindSpore 是华为开源的深度学习框架,以下是使用 MindSpore 实现 FashionMNIST 数据集图像分类的简单示例,包括构建一个基础的卷积神经网络 (CNN) 并展示损失曲线:
```python
import mindspore.nn as nn
from mindspore import Tensor, context
from mindspore.train.callback import LossMonitor
from mindspore.dataset import mnist
from mindspore.train import Model
from mindspore.common import set_seed
# 设置随机种子
set_seed(1)
# 检查是否在GPU上运行
context.set_context(mode=context.GRAPH_MODE, device_target="GPU")
# 加载FashionMNIST数据
data_loader = mnist.train_dataset(num_samples=60000)
test_loader = mnist.test_dataset(num_samples=10000)
class Net(nn.Cell):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 16, kernel_size=5, stride=1, padding=2)
self.relu = nn.ReLU()
self.max_pool = nn.MaxPool2d(kernel_size=2, stride=2)
self.flatten = nn.Flatten()
self.fc1 = nn.Dense(128, 10)
def construct(self, x):
x = self.conv1(x)
x = self.relu(x)
x = self.max_pool(x)
x = self.flatten(x)
x = self.fc1(x)
return x
net = Net()
loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True)
opt = nn.Momentum(net.trainable_params(), learning_rate=0.001, momentum=0.9)
model = Model(net, loss_fn=loss, optimizer=opt, metrics={"accuracy"})
# 训练过程
epochs = 10
for epoch in range(epochs):
print("Epoch:", epoch + 1)
model.train(1000, data_loader)
# 显示损失监控
print("Training Loss:", LossMonitor().get_monitor_value())
# 测试过程
model.eval(test_loader)
print("Testing Accuracy:", model.eval_metrics["accuracy"])
# 绘制损失曲线
# 这里由于MindSpore官方文档目前没有提供直接绘制损失曲线的API,
# 你需要将LossMonitor保存的值手动绘制成图表,例如使用matplotlib或者其他可视化库。
# 你可以按照类似以下的方式记录并画图:
# train_loss_list = LossMonitor().get_train_loss_list()
# test_loss_list = LossMonitor().get_test_loss_list()
# plt.plot(train_loss_list, label='Train Loss')
# plt.plot(test_loss_list, label='Test Loss')
# plt.xlabel('Epochs')
# plt.ylabel('Loss')
# plt.legend()
# plt.show()
```
注意:上述代码片段仅展示了基本的框架,实际应用中你可能需要对网络结构、优化器参数以及数据增强等进行调整,并根据需要添加更多的训练和验证步骤。同时,MindSpore 中并未内置直接绘制损失曲线的功能,如需绘制,需要结合第三方可视化库自行实现。
阅读全文