引言

深度学习是当前人工智能领域的热点,而CUDA则是加速深度学习计算的重要工具。Ubuntu 18.04系统作为一款广泛使用的Linux发行版,内置了对CUDA的支持,使得深度学习入门变得无障碍。本文将详细介绍如何在Ubuntu 18.04系统中配置CUDA环境,并探讨如何开始深度学习之旅。

系统要求

在开始之前,请确保您的Ubuntu 18.04系统满足以下要求:

  • 硬件要求:NVIDIA GPU(至少1GB显存)
  • 软件要求:Ubuntu 18.04系统

安装CUDA Toolkit

    更新系统

    sudo apt update
    sudo apt upgrade
    

    添加CUDA源

    sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub
    sudo add-apt-repository "deb [arch=amd64] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /"
    

    安装CUDA Toolkit

    sudo apt update
    sudo apt install cuda
    

    验证CUDA安装

    nvcc --version
    

如果安装成功,您将看到CUDA Toolkit的版本信息。

安装深度学习框架

以下是一些常用的深度学习框架,您可以根据自己的需求选择安装:

安装TensorFlow

    安装TensorFlow GPU版本

    pip install tensorflow-gpu
    

    验证TensorFlow安装

    import tensorflow as tf
    print(tf.__version__)
    

安装PyTorch

    安装PyTorch GPU版本

    pip install torch torchvision torchaudio
    

    验证PyTorch安装

    import torch
    print(torch.__version__)
    

深度学习实践

以下是使用TensorFlow和PyTorch进行深度学习实践的一个简单例子:

TensorFlow实践

import tensorflow as tf

# 创建一个简单的神经网络
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(784,)),
    tf.keras.layers.Dense(10, activation='softmax')
])

# 编译模型
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# 加载数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# 数据预处理
x_train, x_test = x_train / 255.0, x_test / 255.0

# 训练模型
model.fit(x_train, y_train, epochs=5)

# 测试模型
model.evaluate(x_test, y_test)

PyTorch实践

”`python import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms

创建一个简单的神经网络

class SimpleNN(nn.Module):

def __init__(self):
    super(SimpleNN, self).__init__()
    self.fc1 = nn.Linear(784, 10)
    self.fc2 = nn.Linear(10, 10)

def forward(self, x):
    x = torch.relu(self.fc1(x))
    x = self.fc2(x)
    return x

实例化网络

model = SimpleNN()

定义损失函数和优化器

criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001)

加载数据集

transform = transforms.Compose([transforms.ToTensor()]) train_dataset = datasets.MNIST(root=‘./data’, train=True, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)

训练模型

for epoch in range(5):

for data, target in train_loader:
    optimizer.zero_grad()
    output = model(data)
    loss = criterion(output, target)
    loss.backward()
    optimizer.step()

测试模型

test_dataset = datasets.MNIST(root=‘./data’, train=False, transform=transform) test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

with torch.no_grad():

correct = 0
total = 0
for data, target in test_loader:
    outputs = model(data)
    _, predicted = torch.max(outputs.data, 1)
    total += target.size(0)
    correct += (predicted == target).sum().item