大约一周前我买了一台 M1 Macbook Air。
我尝试使用 MNIST 进行机器学习作为试验,所以这是一份关于如何做到这一点和结果的备忘录。
MNIST 是一组手写字符从 0 到 9 的图像,AI 通过图像识别猜测数字。

环境

macOS Ventura 似乎已经停止使用 Python,所以从 1 开始安装 Python。
就我而言,当我从自制软件安装时,路径没有顺利通过,所以官方网站我从安装
这次我选择了 Python 3.9.13。

安装 Python 后,安装库。
让我们使用 pip 安装以下内容:

点子升级

pip3 install --upgrade pip

麻木的

pip3 install numpy

熊猫

pip3 install pandas

张量流

pip3 install tensorflow-macos

matplotlib

pip3 install matplotlib

运行 MNIST

由于某种原因,我在尝试使用 Keras 安装 mnist 时出现错误,所以我决定提前下载并在本地运行。
MNIST 数据集可在以下网站上获得。
https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
将 mnist.npz 复制到 /Username/.keras/datasets。

接下来,执行程序描述如下。
这一次,我们将进行三层深度学习。

import os
import pathlib
import tensorflow as tf
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
import time

def main():
    start = time.time()
    CSV_FILE_PATH = "trainlog.csv"

    if not os.path.exists(CSV_FILE_PATH):
        pathlib.Path(CSV_FILE_PATH).touch()
    
    mnist = tf.keras.datasets.mnist
    (x_train, y_train), (x_test, y_test) = mnist.load_data()
    del mnist
    x_train, x_test = x_train/255.0, x_test/255.0
    model = tf.keras.models.Sequential([
        tf.keras.layers.Flatten(input_shape = (28, 28), name = 'input'),
        tf.keras.layers.Dense(512, name = 'fc_1'),
        tf.keras.layers.Activation(tf.nn.relu, name = 'relu_1'),
        tf.keras.layers.Dense(256, name = 'fc_2'),
        tf.keras.layers.Activation(tf.nn.relu, name = 'relu_2'),
        tf.keras.layers.Dense(256, name = 'fc_3'),
        tf.keras.layers.Activation(tf.nn.relu, name = 'relu_3'),
        tf.keras.layers.Dense(10, name = 'dense_3'),
        tf.keras.layers.Activation(tf.nn.softmax, name = 'softmax')])
    model.summary()
    model.compile(optimizer = 'adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
    callbacks = []
    callbacks.append(tf.keras.callbacks.CSVLogger(CSV_FILE_PATH))
    history = model.fit(x_train, y_train, batch_size = 100, epochs = 20, verbose = 1, validation_data = (x_test, y_test), callbacks = callbacks)
    train_loss, train_acc = model.evaluate(x_train, y_train, verbose = 1)
    print("loss(train): {:.4}".format(train_loss))
    print("accuracy(train): {:.4}".format(train_acc))
    test_loss, test_acc = model.evaluate(x_test, y_test, verbose = 1)
    print("loss(test): {:.4}".format(test_loss))
    print("accuracy(test): {:.4}".format(test_acc))
    df = pd.read_csv(CSV_FILE_PATH)
    df.head()
    print(time.time() - start)
    epochs = df["epoch"].values
    train_acc = df["accuracy"].values
    train_loss = df["loss"].values
    test_acc = df["val_accuracy"].values
    test_loss = df["val_loss"].values
    plt.plot(epochs, train_loss, label = 'train data')
    plt.plot(epochs, test_loss, label = 'test data')
    plt.xlabel("epochs")
    plt.ylabel("loss
(categorical crossentropy)")
    plt.legend(loc = "upper right")
    plt.show()
    plt.plot(epochs, train_acc, label = 'train data')
    plt.plot(epochs, test_acc, label = 'test data')
    plt.xlabel("epochs")
    plt.ylabel("accuracy")
    plt.legend(loc = "lower right")
    plt.show()
    fig = plt.figure(figsize = (12, 8))
    ROW = 4
    COLUMN = 5

    for i in range(ROW * COLUMN):
        y_true = y_test[i]
        y_pred = model.predict(x_test[i].reshape(1, 28, 28))[0]
        
        plt.subplot(ROW, COLUMN, i + 1)
        plt.imshow(x_test[i], cmap = 'gray')
        plt.title("No.{}
y_true: {}, y_pred: {}".format(i, y_true, y_pred))
        plt.axis("off")

    fig.tight_layout()
    fig.show()
if __name__ == '__main__': main()

执行结果

执行结果如下。我看得出你学得很好。
Macbook AirでAIやってみた

学习执行速度为 41 秒。
看其他文章,在 M1 Macbook pro 上似乎需要 100 多秒。
它似乎比这快得多。
这次的结果似乎和 GeForce RTX 3070 Ti 差不多。
这可能是因为在 M1 发布后还没有立即支持 Tensorflow。

似乎 M1 Macbook Air 已经能够按原样进行机器学习了。
下次我想通过需要更多负载的学习来尝试它。

参考
使用 Keras/Tensorflow 对 MNIST 数据集进行图像分类
机器学习环境基准


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308633110.html

相关文章: