zoukankan      html  css  js  c++  java
  • TensorFlow入门

    ##使用TensorFlow甄别图片中的时尚单品

    MNIST数据集是一个经典的机器学习数据集,该数据集由像素大小28*28的手写数字图片构成,每一个图片都由该图片对应的数字标记,经常用于实现用机器学习模型识别其中的数字来完成对机器学习算法的性能对标。

    本例并没有直接使用MNIST数据集,为了使我们的实现更有趣一点,我们采用了Zalando发布的fashion-mnist数据集。该数据集与MNIST格式一致,但数字被换成了10个种类的挎包、服饰、鞋子。

    以下是Jupyter Notebook中的整个实现过程:

    在tensorflow虚拟环境中启动jupyter notebook

    steve@steve-Lenovo-V2000:~$ source activate tensorflow
    (tensorflow) steve@steve-Lenovo-V2000:~$ jupyter notebook
    
    In[1]	
    import tensorflow as tf
    from tensorflow.examples.tutorials.mnist import input_data
    import numpy as np
    tf.logging.set_verbosity(tf.logging.INFO)
    
    #pixels即特征名称 shape特征的个数 28*28 = 784
    feature_columns = [tf.feature_column.numeric_column('pixels', 							  shape=784)]
    
    In[2]		
    #线性分类器
        classifier = tf.estimator.LinearClassifier(
        				 feature_columns = feature_columns,
        			 	 n_classes = 10,
        			  	 model_dir = "tmp/fashion_mnist/linear"
         	 )
    
    INFO:tensorflow:Using default config.
    INFO:tensorflow:Using config: {'_model_dir': 'tmp/fashion_mnist/linear', '_tf_random_seed': 1, '_save_summary_steps': 100, '_save_checkpoints_secs': 600, '_save_checkpoints_steps': None, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100}
    
    In[3]	
    #输入函数
    def input_fn(data, batch_size, num_epochs, shuffle):
        		return tf.estimator.inputs.numpy_input_fn(
                x = {'pixels': data.images},
                y = data.labels.astype(np.int64),
                batch_size = batch_size,
                num_epochs = num_epochs,
                shuffle = shuffle
               )
    
    In[4]	
    #从下载数据集的路径中读取数据保存到对象DATA_SETS中
    DATA_SETS = input_data.read_data_sets("/home/steve/fashion_mnist")
    
    Extracting /home/steve/fashion_mnist/train-images-idx3-ubyte.gz
    Extracting /home/steve/fashion_mnist/train-labels-idx1-ubyte.gz
    Extracting /home/steve/fashion_mnist/t10k-images-idx3-ubyte.gz
    Extracting /home/steve/fashion_mnist/t10k-labels-idx1-ubyte.gz
    
    In[5]	
    #训练
    classifier.train(input_fn = input_fn(DATA_SETS.train, batch_size = 100, 					num_epochs = 3, shuffle = True))
    
    INFO:tensorflow:Create CheckpointSaverHook.
    INFO:tensorflow:Restoring parameters from tmp/fashion_mnist/linear/model.ckpt-16500
    INFO:tensorflow:Saving checkpoints for 16501 into tmp/fashion_mnist/linear/model.ckpt.
    INFO:tensorflow:loss = 38.0863, step = 16501
    INFO:tensorflow:global_step/sec: 344.156
    INFO:tensorflow:loss = 36.0887, step = 16601 (0.291 sec)
    INFO:tensorflow:global_step/sec: 322.998
    INFO:tensorflow:loss = 42.7409, step = 16701 (0.311 sec)
    INFO:tensorflow:global_step/sec: 281.274
    INFO:tensorflow:loss = 41.0631, step = 16801 (0.354 sec)
    INFO:tensorflow:global_step/sec: 477.183
    INFO:tensorflow:loss = 34.4951, step = 16901 (0.210 sec)
    INFO:tensorflow:global_step/sec: 518.435
    INFO:tensorflow:loss = 29.0231, step = 17001 (0.193 sec)
    INFO:tensorflow:global_step/sec: 488.121
    INFO:tensorflow:loss = 25.1947, step = 17101 (0.205 sec)
    INFO:tensorflow:global_step/sec: 508.804
    INFO:tensorflow:loss = 29.5358, step = 17201 (0.197 sec)
    INFO:tensorflow:global_step/sec: 506.08
    INFO:tensorflow:loss = 41.3665, step = 17301 (0.198 sec)
    INFO:tensorflow:global_step/sec: 383.223
    INFO:tensorflow:loss = 37.4047, step = 17401 (0.261 sec)
    INFO:tensorflow:global_step/sec: 408.678
    INFO:tensorflow:loss = 31.8637, step = 17501 (0.245 sec)
    INFO:tensorflow:global_step/sec: 314.574
    INFO:tensorflow:loss = 36.5287, step = 17601 (0.318 sec)
    INFO:tensorflow:global_step/sec: 431.968
    INFO:tensorflow:loss = 27.3364, step = 17701 (0.231 sec)
    INFO:tensorflow:global_step/sec: 423.543
    INFO:tensorflow:loss = 43.4093, step = 17801 (0.237 sec)
    INFO:tensorflow:global_step/sec: 389.708
    INFO:tensorflow:loss = 36.8287, step = 17901 (0.256 sec)
    INFO:tensorflow:global_step/sec: 487.954
    INFO:tensorflow:loss = 40.7856, step = 18001 (0.205 sec)
    INFO:tensorflow:global_step/sec: 513.674
    INFO:tensorflow:loss = 28.5917, step = 18101 (0.195 sec)
    INFO:tensorflow:Saving checkpoints for 18150 into tmp/fashion_mnist/linear/model.ckpt.
    INFO:tensorflow:Loss for final step: 41.4883.
    
    Out[1]	<tensorflow.python.estimator.canned.linear.LinearClassifier at 				0x7f25ce5f2b00>
    
    In[6]	
    #计算准确度
    
    accuracy_score = classifier.evaluate(input_fn = input_fn(DATA_SETS.test, 					 					batch_size = 100, num_epochs = 1, 											  shuffle = False))['accuracy']
    
    INFO:tensorflow:Starting evaluation at 2018-03-07-08:00:07
    INFO:tensorflow:Restoring parameters from tmp/fashion_mnist/linear/model.ckpt-18150
    INFO:tensorflow:Finished evaluation at 2018-03-07-08:00:08
    INFO:tensorflow:Saving dict for global step 18150: accuracy = 0.8446, average_loss = 0.450767, global_step = 18150, loss = 45.0767
    
    In[7]	
    #深度分类器 使用了深度神经网络
    deep_classifier = tf.estimator.DNNClassifier(
        						feature_columns = feature_columns,
        						n_classes = 10,
        						hidden_units =[100, 75, 50],
        						model_dir = "tmp/fashion_mnist/deep"
                              )
    
    INFO:tensorflow:Using default config.
    INFO:tensorflow:Using config: {'_model_dir': 'tmp/fashion_mnist/deep', '_tf_random_seed': 1, '_save_summary_steps': 100, '_save_checkpoints_secs': 600, '_save_checkpoints_steps': None, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100}
    
    
    In[8]	
    #训练
    deep_classifier.train(input_fn = input_fn(DATA_SETS.train, 
    batch_size = 100, num_epochs = 2, shuffle = True))
    INFO:tensorflow:Create CheckpointSaverHook.
    INFO:tensorflow:Restoring parameters from tmp/fashion_mnist/deep/model.ckpt-6600
    INFO:tensorflow:Saving checkpoints for 6601 into tmp/fashion_mnist/deep/model.ckpt.
    INFO:tensorflow:loss = 37.3415, step = 6601
    INFO:tensorflow:global_step/sec: 185.682
    INFO:tensorflow:loss = 25.2046, step = 6701 (0.541 sec)
    INFO:tensorflow:global_step/sec: 182.251
    INFO:tensorflow:loss = 37.8857, step = 6801 (0.547 sec)
    INFO:tensorflow:global_step/sec: 243.679
    INFO:tensorflow:loss = 20.0217, step = 6901 (0.412 sec)
    INFO:tensorflow:global_step/sec: 191.407
    INFO:tensorflow:loss = 18.9174, step = 7001 (0.521 sec)
    INFO:tensorflow:global_step/sec: 210.536
    INFO:tensorflow:loss = 26.6609, step = 7101 (0.475 sec)
    INFO:tensorflow:global_step/sec: 225.08
    INFO:tensorflow:loss = 29.2771, step = 7201 (0.444 sec)
    INFO:tensorflow:global_step/sec: 238.886
    INFO:tensorflow:loss = 26.5615, step = 7301 (0.419 sec)
    INFO:tensorflow:global_step/sec: 209.95
    INFO:tensorflow:loss = 24.2403, step = 7401 (0.477 sec)
    INFO:tensorflow:global_step/sec: 214.734
    INFO:tensorflow:loss = 20.5827, step = 7501 (0.465 sec)
    INFO:tensorflow:global_step/sec: 223.289
    INFO:tensorflow:loss = 36.1836, step = 7601 (0.448 sec)
    INFO:tensorflow:Saving checkpoints for 7700 into tmp/fashion_mnist/deep/model.ckpt.
    INFO:tensorflow:Loss for final step: 25.4458.
    
    Out[2]	<tensorflow.python.estimator.canned.dnn.DNNClassifier at 0x7f25ca79df28>
    
    In[9]	
    #计算准确度
    accuracy_score = deep_classifier.evaluate(input_fn = 						 			input_fn(DATA_SETS.test, batch_size = 100, num_epochs = 1, 											  shuffle = False))['accuracy']
    
    INFO:tensorflow:Starting evaluation at 2018-03-07-08:00:43
    INFO:tensorflow:Restoring parameters from tmp/fashion_mnist/deep/model.ckpt-7700
    INFO:tensorflow:Finished evaluation at 2018-03-07-08:00:43
    INFO:tensorflow:Saving dict for global step 7700: accuracy = 0.8743, average_loss = 0.355154, global_step = 7700, loss = 35.5154
    
    
    In[10]	
    #选取4000到40045张图片进行一次实际的预测
    #预测输入函数
    predict_input_fn = tf.estimator.inputs.numpy_input_fn(
            	               x = {'pixels': DATA_SETS.test.images[4000:4005]},
                	           batch_size = 1,
                    	       num_epochs = 1,
                        	   shuffle = False)
    In[11]	predictions = deep_classifier.predict(input_fn = predict_input_fn)
    In[12]	for p in predictions:
        		print('Prediction: {} with probabilities {}
    '.format(p['classes'], 														   p['probabilities']))
    
    In[13]	print('Expect correct answer values is: {}'.format
    (DATA_SETS.test.labels[4000:4005]))
    
    INFO:tensorflow:Restoring parameters from tmp/fashion_mnist/deep/model.ckpt-7700
    Prediction: [b'0'] with probabilities [  8.85963202e-01   2.56781423e-05   4.29330952e-03   3.06227105e-03
       5.28713455e-04   2.37491005e-09   1.06063619e-01   2.90737194e-08
       6.30379072e-05   1.69134964e-07]
    
    Prediction: [b'0'] with probabilities [  9.96059775e-01   3.01950354e-09   1.58900730e-05   1.49504587e-04
       3.14754004e-07   1.30554459e-16   3.77456401e-03   1.15441985e-13
       3.15555271e-09   2.77197384e-12]
    
    Prediction: [b'9'] with probabilities [  2.05979784e-08   4.87241074e-08   6.31761395e-07   2.98880963e-07
       5.09397609e-08   9.14796401e-05   4.43378804e-06   3.86087340e-03
       8.52311146e-08   9.96042013e-01]
    
    Prediction: [b'8'] with probabilities [  8.03876731e-07   2.79696058e-11   9.39605727e-09   3.52724818e-08
       4.37717148e-07   4.22516162e-13   3.26979011e-06   4.28372060e-11
       9.99995470e-01   5.50698827e-11]
    
    Prediction: [b'5'] with probabilities [  1.81485848e-05   9.46296313e-06   1.18957887e-05   5.37845017e-06
       1.25248152e-06   9.98875082e-01   6.31277635e-06   6.29263523e-04
       2.42290087e-04   2.00855589e-04]
    Expect correct answer values is: [0 0 9 8 5]
    
    
    
    In[14]	
    #使用matplotlib.pyplot绘制图片
    import matplotlib.pyplot as plt
    #jupyter notebook魔法函数 其功能是将matplotlib绘制的图片直接嵌入到	#notebook里
    %matplotlib inline
    
    for i in range(4000, 4005):
     		   sample = np.reshape(DATA_SETS.test.images[i], (28, 28))
      		   plt.figure()
     		   plt.title('Label: {}'.format(DATA_SETS.test.labels[i]))
     		   plt.imshow(sample, 'gray')
    

    这里写图片描述

    以上5张图片是使用深度分类器实际进行的5次预测,你可以看到5件衣服以及顶部使用数字标明的衣服种类。实际标签依次为0、0、9、8、5,我们的预测结果为0、0、9、8、5。就实际进行的一次预测的结果来说,预测的4000到4004一共5张图片的衣服类型与它们的标签完全一致,100%的成功了。但是针对test数据集进行整体预测的结果进行评估,线性分类器的准确度为84.46%,而深度分类器的准确度为87.43%,很明显深度分类器的准确度高于线性分类器。 事实上,深度分类器的hidden_units参数对预测结果的准确度有着莫大的影响。该参数指定使用的深度神经网络使用几层hidden layer以及每个layer有几个神经元。本例使用的[100, 75, 50]即3层,第一层hidden layer有100个神经元,第二层有75个,第三层有50个。因为该参数是python的list,所以可以任意指定。你可以尝试改变该参数以取得更高的准确率。我将在下一个例子里使用tensorboard详细说明训练过程,以及参数将对训练结果造成怎样的影响。

    参考资料:
    [7] THE MNIST DATABASE of handwritten digits http://yann.lecun.com/exdb/mnist/
    [8] TensorFlow Python API r1.6 : https://www.tensorflow.org/api_guides/python/summary#Generation_of_Summaries

    机器学习遇上时尚潮流 - 使用 MNIST 数据集训练模型
    https://zhuanlan.zhihu.com/p/32710865

  • 相关阅读:
    第1章 初涉MySQL
    成绩转换
    【JSTL】--附加:c:import,c:url;c:param,c:redirect--drp217
    【JSTL】--JSTL表达式:c:forEach,varstatus/begin end/循环控制标签--drp215
    【JSTL】--JSTL表达式:c:forEach--drp215
    【JSTL】--JSTL表达式:c:set,c:if,c:choose,--drp214
    【JSTL】--c:out演示--drp213
    【JSTL】--测试EL表达式--drp212~
    【JSTL】--读取实体成员变量吗?--drp212
    【JSTL】--测试EL表达式--drp212
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842560.html
Copyright © 2011-2022 走看看