📜  使用 Keras 的 Softmax 回归

📅  最后修改于: 2022-05-13 01:55:15.796000             🧑  作者: Mango

使用 Keras 的 Softmax 回归

先决条件:逻辑回归
Keras 入门:
深度学习是机器学习框架的主要子领域之一。它受到 Theano、TensorFlow、Caffe、Mxnet 等各种库的支持,Keras 是最强大且易于使用的Python库之一,它建立在流行的深度学习库(如 TensorFlow、Theano 等)之上,用于创建深度学习模型。
Keras 提供了一组数据集,可用于训练和测试模型。 Fashion MNIST 数据集tf.keras数据集 API 中可用数据集的一部分。该数据集包含7万张时尚物品图像,分布在 10 个类别中,如鞋、包、T 恤等,这些图像被缩放为28 x 28灰度像素。
方法:
因此,方法是首先加载MNIST 对象数据集,然后我们将使用Matplotlib查看示例,以便更好地了解数据集。最后,我们将使用Keras API通过构建神经网络对它们进行分类。稍后我们将在测试集上测试我们训练好的模型,以检查我们模型的准确性。
执行:
代码:加载数据

Python3
mnist = tf.keras.datasets.fashion_mnist
(training_images, training_labels), (test_images, test_labels) = mnist.load_data()


Python3
import numpy as np
np.set_printoptions(linewidth = 200)
import matplotlib.pyplot as plt
plt.imshow(training_images[42])
 
# printing training labels and training images
print(training_labels[42])
print(training_images[42])


Python3
training_images = training_images / 255.0
test_images = test_images / 255.0


Python3
model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
                                    tf.keras.layers.Dense(128, activation = tf.nn.relu),
                                    tf.keras.layers.Dense(10, activation = tf.nn.softmax)])


Python3
model.compile(optimizer = tf.optimizers.Adam(),
              loss = 'sparse_categorical_crossentropy',
              metrics =['accuracy'])
 
model.fit(training_images, training_labels, epochs = 5)


Python3
model.evaluate(test_images, test_labels)


对该对象调用 load_data 将为我们提供两组列表,每组两个列表,它们将是包含数据集项及其标签的图形的训练和测试值。
代码:理解数据

Python3

import numpy as np
np.set_printoptions(linewidth = 200)
import matplotlib.pyplot as plt
plt.imshow(training_images[42])
 
# printing training labels and training images
print(training_labels[42])
print(training_images[42])

输出:

9
[[  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  82 187  26   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   1   0   0   1   0   0 179 240 237 255 240 139  83  64  43  60  54   0   1]
 [  0   0   0   0   0   0   0   0   0   1   0   0   1   0  58 239 222 234 238 246 252 254 255 248 255 187   0   0]
 [  0   0   0   0   0   0   0   0   0   0   2   3   0   0 194 239 226 237 235 232 230 234 234 233 249 171   0   0]
 [  0   0   0   0   0   0   0   0   0   1   1   0   0  10 255 226 242 239 238 239 240 239 242 238 248 192   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0 172 245 229 240 241 240 241 243 243 241 227 250 209   0   0]
 [  0   0   0   0   0   0   0   0   0   6   5   0  62 255 230 236 239 241 242 241 242 242 238 238 242 253   0   0]
 [  0   0   0   0   0   0   0   0   0   3   0   0 255 235 228 244 241 241 244 243 243 244 243 239 235 255  22   0]
 [  0   0   0   0   0   0   0   0   0   0   0 246 228 220 245 243 237 241 242 242 242 243 239 237 235 253 106   0]
 [  0   0   3   4   4   2   1   0   0  18 243 228 231 241 243 237 238 242 241 240 240 240 235 237 236 246 234   0]
 [  1   0   0   0   0   0   0   0  22 255 238 227 238 239 237 241 241 237 236 238 239 239 239 239 239 237 255   0]
 [  0   0   0   0   0  25  83 168 255 225 225 235 228 230 227 225 227 231 232 237 240 236 238 239 239 235 251  62]
 [  0 165 225 220 224 255 255 233 229 223 227 228 231 232 235 237 233 230 228 230 233 232 235 233 234 235 255  58]
 [ 52 251 221 226 227 225 225 225 226 226 225 227 231 229 232 239 245 250 251 252 254 254 252 254 252 235 255   0]
 [ 31 208 230 233 233 237 236 236 241 235 241 247 251 254 242 236 233 227 219 202 193 189 186 181 171 165 190  42]
 [ 77 199 172 188 199 202 218 219 220 229 234 222 213 209 207 210 203 184 152 171 165 162 162 167 168 157 192  78]
 [  0  45 101 140 159 174 182 186 185 188 195 197 188 175 133  70  19   0   0 209 231 218 222 224 227 217 229  93]
 [  0   0   0   0   0   0   2  24  37  45  32  18  11   0   0   0   0   0   0  72  51  53  37  34  29  31   5   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]
 [  0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0]]


正常化:
请注意,数字中的所有值都在 0 到 255 之间。如果我们正在训练神经网络,由于各种原因,如果我们将所有值都视为 0 到 1 之间的值会更容易,这个过程称为“归一化”……幸运的是,在Python中无需循环就可以很容易地标准化这样的列表。我们可以这样做:
代码:

Python3

training_images = training_images / 255.0
test_images = test_images / 255.0

代码:实现 Keras 模型

Python3

model = tf.keras.models.Sequential([tf.keras.layers.Flatten(),
                                    tf.keras.layers.Dense(128, activation = tf.nn.relu),
                                    tf.keras.layers.Dense(10, activation = tf.nn.softmax)])
  • 顺序:定义神经网络中层的顺序。
  • 平:它只是获取图像并将其转换为一维集。
  • 密集:添加一层神经元。
  • 每一层神经元都需要一个激活函数来告诉他们该做什么。有很多选择,但现在只使用这些。
  • Relu:实际上意味着“如果X > 0返回X ,否则返回 0”——所以它只将 0 或更大的值传递给网络中的下一层。
  • Softmax:采用一组值,并有效地选择最大的一个,因此,例如,如果最后一层的输出看起来像[0.1, 0.1, 0.05, 0.1, 9.5, 0.1, 0.05, 0.05, 0.05] ,它使您免于钓鱼寻找最大值,并将其变成[0, 0, 0, 0, 1, 0, 0, 0, 0] 。目标是节省大量编码

第 5 步:编译模型
现在模型已经定义,接下来要做的就是实际构建它。您可以像以前一样使用优化器和损失函数对其进行编译,然后通过调用model.fit来训练它,要求它使您的训练数据适合您的训练标签,即让它找出训练数据与其实际标签之间的关系,所以将来,如果你有看起来像训练数据的数据,那么它可以预测该数据的样子。
代码:

Python3

model.compile(optimizer = tf.optimizers.Adam(),
              loss = 'sparse_categorical_crossentropy',
              metrics =['accuracy'])
 
model.fit(training_images, training_labels, epochs = 5)

输出:

Instructions for updating:
Colocations handled automatically by placer.
Epoch 1/5
60000/60000 [==============================] - 8s 130us/sample - loss: 0.4714 - acc: 0.8322
Epoch 2/5
60000/60000 [==============================] - 8s 137us/sample - loss: 0.3598 - acc: 0.8683
Epoch 3/5
60000/60000 [==============================] - 9s 142us/sample - loss: 0.3201 - acc: 0.8824
Epoch 4/5
60000/60000 [==============================] - 8s 131us/sample - loss: 0.2949 - acc: 0.8917
Epoch 5/5
60000/60000 [==============================] - 8s 140us/sample - loss: 0.2767 - acc: 0.9098

一旦完成训练,我们应该在最后一个 epoch 结束时看到一个准确度值。它可能看起来像 0.9098。这告诉我们,您的神经网络在分类训练数据方面的准确率约为 91%。即,它找出了图像和标签之间的模式匹配,91% 的时间都有效。不是很好,但考虑到它只训练了 5 个 epoch 并且完成得很快,也不错。
第 6 步:模型评估
但是它如何处理看不见的数据呢?这就是我们有测试图像的原因。我们可以调用model.evaluate ,传入两个集合,它会报告每个集合的损失。

代码:

Python3

model.evaluate(test_images, test_labels)

输出:

10000/10000 [==============================] - 1s 60us/sample - loss: 0.2908 - acc: 0.8956

最后,我们训练了我们的模型,并在看不见的数据集上获得了 90% 的准确率。这很不错。
使用 KERAS 的优势:
我们已经看到,我们的计算只是减少到 7-8 行而不是 100 行代码。棒极了。总体而言,这有助于我们节省时间和精力,并减少代码出错的机会。