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

[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

您也许喜欢这些文章

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

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

随时随地机器学习,TF的轻量版——TensorFlow Lite上线

发表至业界新闻
针对于越来越多的在小型和移动设备上进行机器学习任务的需求,TensorFlow团队特意打造了一款轻量级的机器学习工具——TensorFlow Lite,它能够为我们的智能手机直接提供机器学习资源和环境,让智能化体验真正伴随我们,如影随形。

《机器学习有意思! 02》- 使用机器学习生成超级玛丽关卡

发表至趣味项目
系列第二篇,重点介绍了循环神经网络(RNN)的概念,并展示了两个实例:1.文本生成——用海明威《太阳照常升起》的原文训练模型,生成海明威风格的假文章。2.游戏关卡设计——用1985原版超级马里奥的游戏数据和循环神经网络,创建出新的关卡,你甚至可以在网上试玩。

文章评论(3)

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