Tensorflow的hello,world
我们的tenforflow之旅先以一个简单的照片分类器开始,模型使用的是mnist数据集,mnist数据集(Mixed National Institute of Standards and Technology database)是美国国家标准与技术研究院收集整理的大型手写数字数据库,包含60,000个示例的训练集以及10,000个示例的测试集。
载入mnist数据集,并且把样本数据从整数转为浮点数
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
将各层堆叠起来,搭建 tf.keras.Sequential 模型,并选择优化器和损失函数
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
下面这里列出完整的代码
import tensorflow as tf
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
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)),
tf.keras.layers.Dense(128, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test, verbose=2)
Epoch 1/5
1875/1875 [==============================] - 2s 1ms/step - loss: 0.2961 - accuracy: 0.9135
Epoch 2/5
1875/1875 [==============================] - 2s 949us/step - loss: 0.1450 - accuracy: 0.9570
Epoch 3/5
1875/1875 [==============================] - 2s 902us/step - loss: 0.1089 - accuracy: 0.9669
Epoch 4/5
1875/1875 [==============================] - 2s 911us/step - loss: 0.0885 - accuracy: 0.9735
Epoch 5/5
1875/1875 [==============================] - 2s 894us/step - loss: 0.0739 - accuracy: 0.9772
313/313 - 0s - loss: 0.0772 - accuracy: 0.9762
在最后的验证中,可以看到这个分类器的精确度达到了97%.
基本文本分类模型
我们将使用imdb的数据集,其中包含了50000条影视评论文本,从这个数据集切割25000条评论作为训练使用,另外的25000条用作测试。
首先,需要下载IMDB数据集,IMDB 数据集已经打包在 Tensorflow 中。该数据集已经经过预处理,评论(单词序列)已经被转换为整数序列,其中每个整数表示字典中的特定单词。运行以下的代码后,会自动把IMDB下载到机器上
import tensorflow as tf
from tensorflow import keras
import numpy as np
imdb = keras.datasets.imdb
(train_data, train_labels), (test_data, test_labels) = imdb.load_data(num_words=10000)
参数 num_words=10000 保留了训练数据中最常出现的 10,000 个单词,低频词将被丢弃。
探索数据
让我们花一点时间来了解数据格式。该数据集是经过预处理的:每个样本都是一个表示影评中词汇的整数数组。每个标签都是一个值为 0 或 1 的整数值,其中 0 代表消极评论,1 代表积极评论。
print