diff --git a/ANN_mnist.py b/ANN_mnist.py index 50167f9..0561128 100644 --- a/ANN_mnist.py +++ b/ANN_mnist.py @@ -2,7 +2,7 @@ # 训练简单的神经网络,并显示运行时间 # 数据集:mnnist #=============================================== -from __future__ import absolute_import +"""from __future__ import absolute_import from __future__ import division from __future__ import print_function @@ -48,4 +48,62 @@ accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float')) print(sess.run(accuracy,feed_dict={x:mnist_data.test.images,y:mnist_data.test.labels})) endtime=datetime.datetime.now() -print('total time endtime-starttime:', endtime-starttime) \ No newline at end of file +print('total time endtime-starttime:', endtime-starttime)""" + +"""由于tensorflow更新至了2.0,1.0的方法许多已经被合并调整后弃用了,所以使用chatgpt更新了2.0版本的代码如下""" + +# 导入 TensorFlow 和相关的 Keras 类和函数 +import tensorflow as tf +from tensorflow.keras.layers import Dense +from tensorflow.keras.models import Sequential +from tensorflow.keras.optimizers import SGD +import datetime + +# 加载 MNIST 数据集,这是一个手写数字的图像数据集,用于训练和测试机器学习模型。 +mnist = tf.keras.datasets.mnist +(x_train, y_train), (x_test, y_test) = mnist.load_data() + +# 对数据进行归一化处理,将像素值从 [0, 255] 缩放到 [0, 1] 区间,这有助于模型的训练。 +x_train, x_test = x_train / 255.0, x_test / 255.0 + +# 将图像数据从 28x28 的矩阵形式转换成 784 维的向量形式。 +x_train = x_train.reshape(-1, 784) +x_test = x_test.reshape(-1, 784) + +# 将标签转换为 one-hot 编码,这是将分类标签转换为仅在对应类的位置为 1,其余为 0 的向量。 +y_train = tf.keras.utils.to_categorical(y_train, 10) +y_test = tf.keras.utils.to_categorical(y_test, 10) + +# 创建一个 Sequential 模型。这是一种线性堆叠的模型,您可以通过在列表中添加层来构建模型。 +model = Sequential([ + Dense(10, activation='softmax', input_shape=(784,)) +]) + +# 编译模型。这一步设置了模型的优化器、损失函数和评估指标。 +# - 使用 SGD(随机梯度下降)优化器。 +# - 损失函数使用 categorical_crossentropy,适用于多分类问题。 +# - 评估指标使用准确率(accuracy)。 +model.compile(optimizer=SGD(lr=0.3), + loss='categorical_crossentropy', + metrics=['accuracy']) + +# 记录训练开始时间。 +starttime = datetime.datetime.now() + +# 训练模型。这里使用 fit 方法对模型进行训练。 +# - x_train 和 y_train 是训练数据和标签。 +# - epochs=10 表示总共训练 10 个周期。 +# - batch_size=100 指定每次梯度更新时使用的样本数量。 +model.fit(x_train, y_train, epochs=10, batch_size=100) + +# 记录训练结束时间。 +endtime = datetime.datetime.now() + +# 在测试集上评估模型性能。 +# - x_test 和 y_test 是测试数据和标签。 +# 这里返回的是模型在测试数据上的损失值和准确率。 +loss, accuracy = model.evaluate(x_test, y_test) +print(f"Test Accuracy: {accuracy}") + +# 打印总的训练时间。 +print('Total time (endtime - starttime):', endtime - starttime) diff --git a/data/mnist/t10k-images-idx3-ubyte.gz b/data/mnist/t10k-images-idx3-ubyte.gz new file mode 100644 index 0000000..5ace8ea Binary files /dev/null and b/data/mnist/t10k-images-idx3-ubyte.gz differ diff --git a/data/mnist/t10k-labels-idx1-ubyte.gz b/data/mnist/t10k-labels-idx1-ubyte.gz new file mode 100644 index 0000000..a7e1415 Binary files /dev/null and b/data/mnist/t10k-labels-idx1-ubyte.gz differ diff --git a/data/mnist/train-images-idx3-ubyte.gz b/data/mnist/train-images-idx3-ubyte.gz new file mode 100644 index 0000000..b50e4b6 Binary files /dev/null and b/data/mnist/train-images-idx3-ubyte.gz differ diff --git a/data/mnist/train-labels-idx1-ubyte.gz b/data/mnist/train-labels-idx1-ubyte.gz new file mode 100644 index 0000000..707a576 Binary files /dev/null and b/data/mnist/train-labels-idx1-ubyte.gz differ