AI学习之路(7): 生成训练数据

来源:互联网 发布:linux 的more怎么翻页 编辑:程序博客网 时间:2024/05/21 17:03

经过前面的准备,现在来到生成训练数据的新阶段,而在生成数据之前,先看看这段新闻,也可以说是旧闻了。

2012年6月,《纽约时报》披露了Google Brain项目,吸引了公众的广泛关注。这个项目是由著名的斯坦福大学的机器学习教授Andrew Ng和在大规模计算机系统方面的世界顶尖专家Jeff Dean共同主导,用16,000个CPU Core的并行计算平台去训练含有10亿个节点的深度神经网络(DNN,Deep Neural Networks),使其能够自我训练,对2万个不同物体的1,400万张图片进行辨识。在开始分析数据前,并不需要向系统手工输入任何诸如“脸、肢体、猫的长相是什么样子”这类特征。Jeff Dean说:“我们在训练的时候从来不会告诉机器:‘这是一只猫’(即无标注样本)。系统其实是自己发明或领悟了‘猫’的概念。”
2014年3月,同样也是基于深度学习方法,Facebook的 DeepFace 项目使得人脸识别技术的识别率已经达到了 97.25%,只比人类识别 97.5% 的正确率略低那么一点点,准确率几乎可媲美人类。该项目利用了 9 层的神经网络来获得脸部表征,神经网络处理的参数高达 1.2亿。

从这段新闻里可以看到,要使用Tensorflow必须要有大量的训练数据,这里使用了1400万张图片,计算量是惊人的。有了数据之后,就可以让机器自己学习,构造出来自己的深度神经网络。但是我们都是在普通PC机里来学习Tensorflow的,所以数量不能太多,否则计算太慢了。回到我们这个例子,它是一个非常简单的线性回归问题。如果使用传统的编程办法,就是根据数学上的方法,然后对它进行抽像分解,比如使用最小二乘法来求解,然后让开发人员一行一行代码把算法实现出来。现在来到TF了,好像解决线性回归的问题,就变得简单了,不需要程序开发人员,只需要一个操作员,把实验数据输入给TF,就可以自动计算方程出来了。并且TF不但可以计算一维的线性回归,还可以计算多维的线性回归,而且不用修改任何代码,只要给不同的输入数据训练即可。看起来TF就是像C++里的模板,它是一个通用的、灵活的、自适应的模板。

其实,可以把TF当作一个小孩,如果你要让他认识字,要先告诉它,这个字对应是什么意思。这些字和意思就是训练的数据,是TF生成神经网络的基础。

在这个例子里,为了简单起见,直接使用下面的代码来生成训练数据:

# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3x_data = np.random.rand(100).astype(np.float32)y_data = x_data * 0.1 + 0.3
这段代码使用numpy库里的random模块的函数rand来生成随机数,在前面文章已经学习过这个函数的使用,如果还不了解可以回头看一下。由于默认生成的数据都是64位的浮点数,为了简单起见,还是转换为32位的浮点数,所以使用astype(np.float32)来转换。这段代码运行之后,会生成像下面这样的数据:

====================== RESTART: D:/AI/sample/tf_1.15.py ======================
[ 0.70405102  0.61570853  0.87308896  0.45296744  0.37736508  0.6797002
  0.09379926  0.32359388  0.46764055  0.77653575  0.15795791  0.65861601
  0.26614654  0.2556974   0.89700532  0.60780615  0.43122688  0.89048529
  0.77601838  0.15203112  0.98827535  0.5890581   0.32155743  0.23476918
  0.42037088  0.88411021  0.76413459  0.54980898  0.61089933  0.06307018
  0.70900387  0.89800489  0.42763299  0.52450663  0.91588277  0.09274247
  0.06676489  0.948502    0.00355364  0.82583654  0.45627272  0.23299092
  0.27515557  0.36546576  0.12408578  0.8973456   0.83187389  0.94323117
  0.20377819  0.27644819  0.59617561  0.8375017   0.6347205   0.37442347
  0.94081807  0.36718944  0.85045648  0.04433619  0.07171503  0.14927267
  0.55873674  0.63533461  0.15528481  0.21342377  0.0684417   0.33737803
  0.07325422  0.13422777  0.47799423  0.08758666  0.0748972   0.16612834
  0.87103868  0.51996118  0.64916074  0.59876722  0.13151391  0.58004898
  0.40890983  0.12511343  0.24550414  0.89369571  0.44549868  0.5793246
  0.97435832  0.00236449  0.74470139  0.28310984  0.41833594  0.15089646
  0.19401258  0.19051966  0.18906432  0.05238314  0.7398296   0.067056
  0.87864172  0.91925138  0.54840708  0.24474047]
[ 0.37040511  0.36157086  0.3873089   0.34529674  0.33773652  0.36797005
  0.30937994  0.3323594   0.34676406  0.3776536   0.31579581  0.36586162
  0.32661468  0.32556975  0.38970053  0.36078063  0.34312269  0.38904855
  0.37760186  0.31520313  0.39882755  0.35890582  0.33215576  0.32347694
  0.34203711  0.38841105  0.37641346  0.35498092  0.36108994  0.30630702
  0.37090039  0.38980049  0.3427633   0.35245067  0.3915883   0.30927426
  0.30667651  0.39485022  0.30035537  0.38258368  0.34562728  0.32329911
  0.32751557  0.3365466   0.3124086   0.38973457  0.38318741  0.39432314
  0.32037783  0.32764482  0.35961756  0.3837502   0.36347207  0.33744237
  0.39408183  0.33671895  0.38504565  0.30443364  0.30717152  0.31492728
  0.35587367  0.36353347  0.31552848  0.32134238  0.30684417  0.33373782
  0.30732542  0.3134228   0.34779942  0.30875868  0.30748972  0.31661284
  0.38710389  0.35199612  0.36491609  0.35987672  0.31315139  0.3580049
  0.340891    0.31251135  0.32455042  0.38936958  0.34454989  0.35793248
  0.39743584  0.30023646  0.37447014  0.328311    0.34183359  0.31508964
  0.31940126  0.31905198  0.31890646  0.30523834  0.37398297  0.30670562
  0.38786417  0.39192516  0.35484073  0.32447407]
>>> 

生成这些数据运行代码:

import tensorflow as tfimport numpy as npx_data = np.random.rand(100).astype(np.float32)y_data = x_data * 0.1 + 0.3print(x_data)print(y_data)
通过简单的两行代码,就可以生成100个训练数据了。在这里,我们是使用一个线性方程来生成,斜率是0.1, 截距是0.3,有了这些数据,就可以提供给TF训练了。在这里我们并没有告诉TF关于斜率和截距,而让TF通过X和Y的数据来找出来。其实就像我们拿这些数据去问一个初中生,让他观察这些数据,把斜率和截距还原出来,至于这个初中生使用什么方法,使用什么过程,我们不用关心它。所以以后做物理实验的同学,再做报告作业就简单了,只需要拿到实验数据,直接把数据给TF,它自动计算方程出来了。TF是否可以找出相应的斜率和截距吗?是否有点担心呢,且听下回分解。

1. C++标准模板库从入门到精通 

http://edu.csdn.net/course/detail/3324

2.跟老菜鸟学C++

http://edu.csdn.net/course/detail/2901

3. 跟老菜鸟学python

http://edu.csdn.net/course/detail/2592

4. 在VC2015里学会使用tinyxml库

http://edu.csdn.net/course/detail/2590

5. 在Windows下SVN的版本管理与实战 

 http://edu.csdn.net/course/detail/2579

6.Visual Studio 2015开发C++程序的基本使用 

http://edu.csdn.net/course/detail/2570

7.在VC2015里使用protobuf协议

http://edu.csdn.net/course/detail/2582

8.在VC2015里学会使用MySQL数据库

http://edu.csdn.net/course/detail/2672



0 0
原创粉丝点击