大约一周前我买了一台 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()
执行结果
执行结果如下。我看得出你学得很好。
学习执行速度为 41 秒。
看其他文章,在 M1 Macbook pro 上似乎需要 100 多秒。
它似乎比这快得多。
这次的结果似乎和 GeForce RTX 3070 Ti 差不多。
这可能是因为在 M1 发布后还没有立即支持 Tensorflow。
似乎 M1 Macbook Air 已经能够按原样进行机器学习了。
下次我想通过需要更多负载的学习来尝试它。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308633110.html