集智专栏
资源加载中,请稍后...
集智专栏

[2018.01.14] “女生科技体验节” TensorFlow Workshop

上周日在北航南边的丽亭华苑酒店举办了一个“女生科技体验节”(注意是“体验”不是“体检”),主办方找我去主持了一个workshop。

这个workshop译为“工作坊”,感觉不如直译叫“功店”,还正好契合女性主题,来的都是公举。


现场挺热闹,后排还有很多加座没桌子的朋友(也有部分男生,可能是家属)。


显示屏很亮,所以我就变成了一个黑人,呈喊麦和打碟的手势。




上图里的MNIST可能很多人已经熟悉了,但是他已经不适合这个版本了。这次用的是穿上了滑板鞋的MNIST,Fashion-MNIST。

看这个架势是不是有点像吃鸡里开箱子?

跟初代目MNIST一样,Fashion-MNIST也是一堆28x28的小图片,分为10个类别,其中训练集55000个,测试集(其实是验证集)10000个。现场讲解的基于TensorFlow的分类程序如下:




1. 预处理

程序说明
预处理
预处理代码
#!mkdir fashion-mnist #!cp //mnt/vol0/tensorflow/fashion-mnist/* ~/work/fashion-mnist/ !cp /mnt/vol0/tensorflow/fashion-mnist/fashion-mnist_train.csv ~/work !cp /mnt/vol0/tensorflow/fashion-mnist/fashion-mnist_test.csv ~/work
示例代码
import numpy as np import pandas as pd import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 导入数据集 base_model_dir = "tfmodels/fasion_mnist/" #fashion_mnist = input_data.read_data_sets("fashion-mnist") # 为节省线上运行时间,这里只读取了10000个训练样本和2000个测试样本 data_train = pd.read_csv('fashion-mnist_train.csv', nrows=10000) data_test = pd.read_csv('fashion-mnist_test.csv', nrows=2000) # 定义特征列 feature_columns = [tf.feature_column.numeric_column( "pixels", shape=784)]
程序验证过程
True


2. 训练分类器

程序说明
训练分类器
示例代码
def make_input_fn(data, batch_size, num_epochs, shuffle): return tf.estimator.inputs.numpy_input_fn( x={'pixels': data[0:, 1:]}, y=data[:,0].astype(np.int64), batch_size=batch_size, num_epochs=num_epochs, shuffle=shuffle) # 分类器 classifier = tf.estimator.LinearClassifier( feature_columns=feature_columns, n_classes=10, model_dir=base_model_dir + "linear")
程序验证过程
True


程序说明
启动训练
示例代码
# 训练 classifier.train(input_fn=make_input_fn(data_train, batch_size=100, num_epochs=2, shuffle=True))
程序验证过程
True


3. 评估模型

程序说明
评估模型
示例代码
accuracy_score = classifier.evaluate( input_fn=make_input_fn( data_test, batch_size=100, num_epochs=1, shuffle=False))['accuracy'] print("Accuracy: {}".format(accuracy_score))
程序验证过程
True


以上是最简单的线性分类器,接着试试神经网络:

程序说明
神经网络
示例代码
deep_classifier = tf.estimator.DNNClassifier( feature_columns=feature_columns, n_classes=10, hidden_units=[100, 75, 50], model_dir=base_model_dir + "deep" ) deep_classifier.train(input_fn=make_input_fn(data_train, batch_size=100, num_epochs=2, shuffle=True)) accuracy_score = deep_classifier.evaluate( input_fn=make_input_fn( data_test, batch_size=100, num_epochs=1, shuffle=False))['accuracy'] print("Accuracy: {}".format(accuracy_score))
程序验证过程
True


你会发现神经网络的预测准确度好像还不如最初级的线性分类器,一个可能的原因是数据量过小(只取了原始数据集的约1/5),稍微复杂的模型反而容易过拟合。

实地测试一下预测器的准确度:

程序说明
Inference
示例代码
predict_input_fn = tf.estimator.inputs.numpy_input_fn( x={'pixels': data_test[1000:1005, 1:]}, batch_size=1, num_epochs=1, shuffle=False) predictions = deep_classifier.predict(input_fn=predict_input_fn) # 进行预测 for prediction in predictions: print("Predictions: {} with probabilities {}\n".format( prediction["classes"], prediction["probabilities"])) print('Expected answers values: {}'.format( data_test[1000:1005, 0])) # 可视化真实结果 import matplotlib.pyplot as plt %matplotlib inline for i in range(1000,1005): sample = np.reshape(data_test[i, 1:], (28,28)) plt.figure() plt.title("Correct label: {}".format(data_test[i, 0].astype(np.int))) plt.imshow(sample, 'gray')
程序验证过程
True

您也许喜欢这些文章

《银翼杀手:2049》中未来科技离目前的我们有多远?

发表至业界新闻
我们来借此机会展望盘点一下未来科技与现实世界的差距在哪。

如何创造心智:揭示人类思维的秘密

发表至趣味项目
原作者Milo毕业于牛津大学经济学专业,也是一名Python开发者和人工智能爱好者。本文是他对Ray Kurzweil的著作_How to create a mind: The secret of human thought revealed_的读后感,首发于Medium,原文链接及作者主页可见于文首。

数学不行还学AI - 第5话 - 神经网络平话演义(下)

发表至趣味项目
《神经网络平话演义》下集,承接上集,对神经网络的一些重要概念进行了概括总结,并对人工智能的发展和未来做了展望。

文章评论(3)

新用户197 发表于 3月前回复
回复Kaiser:如果刷新过网页的话,需要重新运行第一个代码块“预处理”,导入文件。
我是把程序复制 放在avocado里面运行的 所以没有包含“预处理” 文件 能不能提供一下呀长者!
Kaiser集智 站长 发表于 3月前回复
回复新用户197:上面程序不能运行 缺少csv文件!
如果刷新过网页的话,需要重新运行第一个代码块“预处理”,导入文件。
新用户197 发表于 3月前回复
上面程序不能运行 缺少csv文件!