前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用tensorflow创建一个简单的神经网络

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

作者头像
生信修炼手册
发布2021-07-06 16:37:45
9550
发布2021-07-06 16:37:45
举报
文章被收录于专栏:生信修炼手册生信修炼手册

欢迎关注”生信修炼手册”!

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

1. 加载数据

tensorflow集成了keras这个框架,提供了Fashion MNIST数据集,该数据集包含了10个类别共7万张服装图像,加载方式如下

代码语言:javascript
复制
>>> 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.gz
32768/29515 [=================================] - 0s 1us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 2s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 1us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/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_labels
array([9, 0, 0, ..., 3, 0, 5], dtype=uint8)

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

代码语言:javascript
复制
>>> 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层的神经网络,依次为输入层,隐藏层,输出层,代码如下

代码语言:javascript
复制
>>> 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. 编译

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

代码语言:javascript
复制
>>> model.compile(optimizer='adam', loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])

4. 训练模型

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

代码语言:javascript
复制
>>> 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/10
1875/1875 [==============================] - 6s 2ms/step - loss: 0.5006 - accuracy: 0.8248
Epoch 2/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.3785 - accuracy: 0.8640
Epoch 3/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.3386 - accuracy: 0.8758
Epoch 4/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.3138 - accuracy: 0.8856
Epoch 5/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2969 - accuracy: 0.8906
Epoch 6/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2816 - accuracy: 0.8958
Epoch 7/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2700 - accuracy: 0.8996
Epoch 8/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2596 - accuracy: 0.9034
Epoch 9/10
1875/1875 [==============================] - 3s 2ms/step - loss: 0.2485 - accuracy: 0.9078
Epoch 10/10
1875/1875 [==============================] - 4s 2ms/step - loss: 0.2413 - accuracy: 0.9109
<tensorflow.python.keras.callbacks.History object at 0x00000286E608ED88>

5. 评估模型

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

代码语言:javascript
复制
>>> test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
313/313 - 1s - loss: 0.3343 - accuracy: 0.8850

6. 使用模型进行预测

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

代码语言:javascript
复制
>>> 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·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档