minist问题
Tensor Flow
代码分析
下载数据集
mnist = learn.datasets.load_dataset('mnist')
恩,就是这么简单,一行代码下载解压mnist数据,每个img已经灰度化成长784的数组,每个label已经one-hot成长度10的数组
numpy读取图像到内存,用于后续操作,包括训练集(只取前10000个)和验证集
data = mnist.train.images
labels = np.asarray(mnist.train.labels, dtype=np.int32)
test_data = mnist.
test.images test_labels = np.asarray(mnist.test.labels, dtype=np.int32)
max_examples = 10000
data = data[:max_examples]
labels = labels[:max_examples]
可视化图像
def display(i):
img = test_data[i]
plt.title('Example %d. Label: %d' % (i, test_labels[i]))
plt.imshow(img.reshape((28, 28)), cmap=plt.cm.gray_r)
plt.show()
用matplotlib展示灰度图
训练分类器
提取特征(这里每个图的特征就是784个像素值)
feature_columns = learn.infer_real_valued_columns_from_input(data)
创建线性分类器并训练
classifier = learn.LinearClassifier(feature_columns=feature_columns, n_classes=10) classifier.fit(data, labels, batch_size=100, steps=1000)
注意要制定n_classes为labels的数量
result = classifier.evaluate(test_data, test_labels)print result["accuracy"]
速度非常快,而且准确率达到91.4%
可以只预测某张图,并查看预测是否跟实际图形一致
# here's one it gets right
print ("Predicted %d, Label: %d" % (classifier.predict(test_data[0]), test_labels[0])) display(0)
# and one it gets wrong
print ("Predicted %d, Label: %d" % (classifier.predict(test_data[8]), test_labels[8])) display(8)
可视化权重以了解分类器的工作原理
weights = classifier.weights_
a.imshow(weights.T[i].reshape(28, 28), cmap=plt.cm.seismic)
weight可视化
从上图可知:
1、这里展示了8个张图中,每个像素点(也就是feature)的weights,
2、红色表示正的权重,蓝色表示负的权重
3、作用越大的像素,它的颜色越深,也就是权重越大
4、所以权重中红色部分几乎展示了正确的数字
Next steps
Github工程地址 https://github.com/ahangchen/GoogleML