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

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

Kaiser

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

您也许喜欢这些文章

集智专栏

是直是弯?爆照判断

发表至业界新闻
长久以来,“性取向”都是一个争议性的话题,尤其是在“政治正确”大行其道的如今。最近,斯坦福大学的一项研究提供了不得了的说法。该研究分析了逾35000张脸部图片,并建立了准确度极高的的算法,来判断人的性取向。
集智专栏

万物皆可JS——Google发布deeplearn.js

发表至前端开发
Google拥有着几乎是世界上最受欢迎的浏览器,同时也是业界著名的人工智能专家聚居地。那么,当网络浏览器和支撑人工智能的深度学习结合起来,又会发生什么事情呢?浏览器真的能负担得起深度学习所需要的海量计算负载么?这样做又有什么实际意义?让我们来看一看Google发布的Deeplearn.js是如何回答这些问题的。
集智专栏

AI会开脑洞么?DeepMind说是的!

发表至业界新闻
长久以来我们都在讨论一个问题——AI能自己思考吗?现在,越来越多的人开始相信,使用深度学习和强化学习打造的人工智能是可以具备思考能力的。而DeepMind的科学家则更进一步,他们已经开始试图让深度强化学习过程中的机器人在训练中具备想象规划能力,并通过例如推箱子之类的游戏来展现他们的研究成果。

文章评论(3)

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