使用tensorflow创建一个简单的神经网络

本文是对tensorflow官方入门教程的学习和翻译,展示了创建一个基础的神经网络模型来解决图像分类问题的过程。具体步骤如下

1.  加载数据

tensorflow集成了keras这个框架,提供了Fashion MNIST数据集,该数据集包含了10个类别共7万张服装图像,加载方式如下
>>> import tensorflow as tf>>> from tensorflow import keras>>> import numpy as np>>> import matplotlib.pyplot as plt>>> print(tf.__version__)2.5.0>>> fashion_mnist = keras.datasets.fashion_mnist>>> (train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz32768/29515 [=================================] - 0s 1us/stepDownloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz26427392/26421880 [==============================] - 2s 0us/stepDownloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz8192/5148 [===============================================] - 0s 1us/stepDownloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz4423680/4422102 [==============================] - 0s 0us/step>>> class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat','Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']>>> train_images.shape(60000, 28, 28)>>> train_images.shape(60000, 28, 28)>>> len(train_labels)60000>>> train_labelsarray([9, 0, 0, ..., 3, 0, 5], dtype=uint8)

对这7万张图像,其中6万张用于训练模型,1万张用于评估模型效果,通过以下代码,可以查看具体的图像内容

>>> train_images = train_images / 255.0>>> test_images = test_images / 255.0>>> plt.figure(figsize=(10, 10))<Figure size 1000x1000 with 0 Axes>>>> for i in range(25):... plt.subplot(5, 5, i + 1)... plt.xticks([])... plt.yticks([])... plt.grid(False)... plt.imshow(train_images[i], cmap=plt.cm.binary)... plt.xlabel(class_names[train_labels[i]])...>>> plt.show()

可视化结果如下

2. 构建神经网络

利用keras的高级API可以方便的构建神经网络模型,这里构建一个3层的神经网络,依次为输入层,隐藏层,输出层,代码如下

>>> model = keras.Sequential([... keras.layers.Flatten(input_shape=(28, 28)),... keras.layers.Dense(128, activation='relu'),... keras.layers.Dense(10)... ])

输入层的作用是将28X28像素的灰度图像转换为一维数组,没有任何参数;隐藏层包含了128个神经元,输出层包含了10个神经元,对应10个服装类别。

3. 编译

模型在训练之前,必须对其进行编译,主要是确定损失函数,优化器以及评估分类效果好坏的指标,代码如下

>>> model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

4. 训练模型

使用训练集训练模型,代码如下

>>> model.fit(train_images, train_labels, epochs=10)2021-06-16 09:40:47.034516: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:176] None of the MLIR Optimization Passes are enabled (registered 2)Epoch 1/101875/1875 [==============================] - 6s 2ms/step - loss: 0.5006 - accuracy: 0.8248Epoch 2/101875/1875 [==============================] - 3s 2ms/step - loss: 0.3785 - accuracy: 0.8640Epoch 3/101875/1875 [==============================] - 4s 2ms/step - loss: 0.3386 - accuracy: 0.8758Epoch 4/101875/1875 [==============================] - 4s 2ms/step - loss: 0.3138 - accuracy: 0.8856Epoch 5/101875/1875 [==============================] - 4s 2ms/step - loss: 0.2969 - accuracy: 0.8906Epoch 6/101875/1875 [==============================] - 4s 2ms/step - loss: 0.2816 - accuracy: 0.8958Epoch 7/101875/1875 [==============================] - 4s 2ms/step - loss: 0.2700 - accuracy: 0.8996Epoch 8/101875/1875 [==============================] - 4s 2ms/step - loss: 0.2596 - accuracy: 0.9034Epoch 9/101875/1875 [==============================] - 3s 2ms/step - loss: 0.2485 - accuracy: 0.9078Epoch 10/101875/1875 [==============================] - 4s 2ms/step - loss: 0.2413 - accuracy: 0.9109<tensorflow.python.keras.callbacks.History object at 0x00000286E608ED88>

5. 评估模型

使用测试集评估模型效果,代码如下

>>> test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)313/313 - 1s - loss: 0.3343 - accuracy: 0.8850

6. 使用模型进行预测

为了更好的显示预测结果,在模型的后面添加一层softmax层,表示每个类别对应的概率,代码如下

>>> probability_model = tf.keras.Sequential([model, tf.keras.layers.Softmax()])>>> predictions = probability_model.predict(test_images)>>> predictions[0]array([3.61419183e-07, 9.85207915e-09, 1.53500035e-09, 8.95436336e-10, 4.15553314e-10, 3.14166857e-04, 1.43166235e-05, 6.38929196e-03, 4.86064877e-09, 9.93281841e-01], dtype=float32)>>> np.argmax(predictions[0])9>>> test_labels[0]9

上述代码完整展示了神经网络模型的构建,训练,预测等过程,可以看到,通过tensorflow的API可以简单快速的构建一个神经网络模型。

·end·
(0)

相关推荐