前面我们学习过回归问题,比如对于房价的预测,因为其预测值是个连续的值,因此属于回归问题. 但还有一类问题属于分类的问题,比如我们根据一张图片来辨别它是一只猫还是一只狗.某篇文章的内容是属于体育新闻还是经济新闻等,这个结果是有一个全集的离散值,这类问题就是分类问题. 我有时会把回归问题看成是分类问题,比如对于房价值的预测,在实际的应用中,一般不需要把房价精确到元为单位的,比如对于均价,以上海房价为例,可以分为:5000-10万这样的一个范围段,并且以1000为单位就可以了,尽管这样分出了很多类,但…
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow为张量从流图的一端流动到另一端计算过程.TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统. 安装 在windows中我们以最简单的方式进行安装. C:\> pip3 install --upgrade tensorflow 如果你机器有GPU的话,可以用如…
本节主要用一个例子来讲述一下基本的tensorflow用法. 在这个例子中,我们首先伪造一些线性数据点,其实这些数据中本身就隐藏了一些规律,但我们假装不知道是什么规律,然后想通过神经网络来揭示这个规律. 伪造数据 import numpy as np # 创建100个随机数 x_data = np.random.rand(100).astype(np.float32) # 创建最终要模拟的线性公式 y_data = x_data * 0.1 + 0.3 创建模型 在伪造数据之后,我们当作不知道这…
在程序中定义变量很简单,只要定义一个变量名就可以,但是tensorflow有点类似在另外一个世界,因此需要通过当前的世界中跟tensorlfow的世界中进行通讯,来告诉tensorflow的世界中定义了一个变量,这个通讯的空间就是tf类,看个例子就应该能明白: import tensorflow as tf state = tf.Variable(0) print(state.name) 这里定义了一个tensorflow变量,并且设置了一个初始值0,在tensorflow世界中每个变量也有其相…
当我们回到家,如果家里有异样,我们能够很快就会发现家中的异样,那是因为这些异常的摆设在我们的大脑中会产生较强的脑电波. 当我们听到某个单词,我们大脑中跟这个单词相关的神经元会异常兴奋,而同这个单词无关的神经元就不会有很大的刺激. 这个就是大脑中的激励函数. 有了激励函数,我们才会对外部的刺激产生非线性的反应,有的神经元反应比较强烈,而有的神经元基本没有反应. 在神经网络中激励函数有很多,但作为初学的我们,只要了解其中常用的几个就可以了. relu 这是一种使用比较广泛的并且计算量也很少的激励函数…
前面我们曾有篇文章中提到过关于用tensorflow训练手写2828像素点的数字的识别,在那篇文章中我们把手写数字图像直接碾压成了一个784列的数据进行识别,但实际上,这个图像是2828长宽结构的,我们这次使用CNN卷积神经网络来进行识别. 卷积神经网络我的理解是部分模仿了人眼的功能. 我们在看一个图像时不是一个像素点一个像素点去分辨的,我们的眼睛天然地具有大局观,我们看到某个图像时自动地会把其中的细节部分给聚合起来进行识别,相反,如果我们用个放大镜看到其中的各个像素点时反而不知道这是啥东西了.…
本节主要定义个添加层的函数,在深度学习中是通过创建多层神经网络来实现的,因此添加层的函数会被经常用到: import tensorflow as tf def add_layer(inputs, in_size, out_size, activation_function=None): """ 添加层 :param inputs: 输入数据 :param in_size: 输入数据的列数 :param out_size: 输出数据的列数 :param activation_f…
在机器学习中可能会存在过拟合的问题,表现为在训练集上表现很好,但在测试集中表现不如训练集中的那么好. 图中黑色曲线是正常模型,绿色曲线就是overfitting模型.尽管绿色曲线很精确的区分了所有的训练数据,但是并没有描述数据的整体特征,对新测试数据的适应性较差. 一般用于解决过拟合的方法有增加权重的惩罚机制,比如L2正规化,但在本处我们使用tensorflow提供的dropout方法,在训练的时候, 我们随机忽略掉一些神经元和神经联结 , 使这个神经网络变得"不完整". 用一个不完整…
前面我们用Tensorboard显示了tensorflow的程序结构,本节主要用Tensorboard显示各个参数值的变化以及损失函数的值的变化. 这里的核心函数有: histogram 例如: tf.summary.histogram(layer_name + "/weights", Weights) 这里用tf.summary.histogram函数来显示二维数据在不同网络层的变化情况,其中第一个参数是名字,可以用/来进行分层显示,第二个参数就是相应变量的值. scalar tf.…
tensorflow自带了可视化的工具:Tensorboard.有了这个可视化工具,可以让我们在调整各项参数时有了可视化的依据. 本次我们先用Tensorboard来可视化Tensorflow的结构. 在输出tensorflow结构的关键步骤是: writer = tf.summary.FileWriter("E:/todel/data/tensorflow", sess.graph) 这个函数中把当前的tensorflow的结构图输出到指定的目录下. 而为了能够使输出的结构能够有一定…
上次我们添加了一个add_layer函数,这次就要创建一个神经网络来预测/拟合相应的数据. 下面我们先来创建一下虚拟的数据,这个数据为二次曲线数据,但同时增加了一些噪点,其图像为: 相应的创建这些伪造数据的代码为: import numpy as np # 创建一列(相当于只有一个属性值),300行的x值,这里np.newaxis用于新建出列数据,使其shape为(300, 1) x_data = np.linspace(-1, 1, 300)[:,np.newaxis] # 增加噪点,噪点的均…
这次我们把上次的结果进行可视化显示,我们会把神经网络的优化过程以图像的方式展示出来,方便我们了解神经网络是如何进行优化的. 首先,我们把测试数据显示出来: # 显示测试数据 fig = plt.figure() ax = fig.add_subplot(1, 1, 1) ax.scatter(x_data, y_data) plt.ion() plt.show() 这里为了能够更加灵活地控制显示的图形,因此增加了subplot,这样方便对其中画出的线进行删除. plt.ion()开启了交互模式,…
之前我们学习过用CNN(卷积神经网络)来识别手写字,在CNN中是把图片看成了二维矩阵,然后在二维矩阵中堆叠高度值来进行识别. 而在RNN中增添了时间的维度,因为我们会发现有些图片或者语言或语音等会在时间轴上慢慢展开,有点类似我们大脑认识事物时会有相关的短期记忆. 这次我们使用RNN来识别手写数字. 首先导入数据并定义各种RNN的参数: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_dat…
当我们对模型进行了训练后,就需要把模型保存起来,便于在预测时直接用已经训练好的模型进行预测. 保存模型的权重和偏置值 假设我们已经训练好了模型,其中有关于weights和biases的值,例如: import tensorflow as tf # 保存到文件 W = tf.Variable([[1, 2, 3], [3, 4, 5]], dtype=tf.float32, name='weights') b = tf.Variable([[1, 2, 3]], dtype=tf.float32,…
tensorflow中的优化器主要是各种求解方程的方法,我们知道求解非线性方程有各种方法,比如二分法.牛顿法.割线法等,类似的,tensorflow中的优化器也只是在求解方程时的各种方法. 比较常用的是:·tf.train.GradientDescentOptimizer()·梯度下降优化器,之前我们一直在使用. 又比如:tf.train.MomentumOptimizer,它会有短时记忆的优化功能. 更多的关于优化器的文档参考(需FQ):https://www.tensorflow.org/a…
在tensorflow中,当定义好结构后,就要通过tf.session()来建立运行时的会话. 本例子应该不难理解,我们用tensorflow来计算一下一个1行2列的矩阵和2行1列矩阵的乘积: import tensorflow as tf # 1行2列的矩阵 mat1 = tf.constant([[3, 3]]) # 2行1列的矩阵 mat2 = tf.constant([[2], [2]]) out = tf.matmul(mat1, mat2) sess = tf.Session() p…
上个文章中讲述了tensorflow中如何定义变量以及如何读取变量的方式,本节主要讲述关于传入值. 变量主要用于在tensorflow系统中经常会被改变的值,而对于传入值,它只是当tensorflow系统运行时预先设置的值,然后在运行期间不会被改变,有点类似函数中的不可变的输入参数. 传入值同常量之间的差别是:常量在tensorflow系统运行之前就已经确定了的值,无法对其进行任何的改变. 而传入值或称为placeholder是在系统运行前需要对其进行设置相应的值. 我们来看一个例子,这个例子只…
前面我们针对电影评论编写了二分类问题的解决方案. 这里对前面的这个方案进行一些改进. 分批训练 model.fit(x_train, y_train, epochs=20, batch_size=512) 这里在训练时增加了一个参数batch_size,使用 512 个样本组成的小批量,将模型训练 20 个轮次. 这个参数可以看成是在训练时不一次性在全部的训练集上进行,而是针对其中的512个题目分批次进行训练.有点类似做512道题目进行训练,然后看结果进行调整,而不是一次性做好25000道题目然…
老鱼为了跟上时代潮流,也开始入门人工智能.机器学习了,瞬时觉得自己有点高大上了:). 从机器学习的实用系列出发,我们会以numpy => pandas => scikit-learn => tensorflow => keras 的学习系列过程,这也是老鱼设定的学习步骤,有兴趣的同学可以跟着老鱼的脚步一点一点往前走,共同进步! 这是我的第一篇关于numpy的学习,我会把我学习的过程记录在这里. 言归正传,学个人工智能和机器学习,为何要学什么numpy啊? 因为numpy是Pytho…
为何要用keras? 两个字:简单. Keras让深度学习像搭建积木一样方便地来进行,使前面的tensorflow能够更加方便地使用. 虽然还有其它更多的理由,比如:Keras 支持多个后端引擎,不会将你锁定到一个生态系统中. 但是对于我来讲,最大的优点就是简单方便. 安装keras pip3 install keras 验证keras是否安装成功? 在命令行中进行操作: 这里同时就显示了后台引擎为tensorflow. 如果没有安装过tensorflow,则可以直接在命令行中输入如下命令进行安…
这次老鱼开始学习matplotlib了. 在上个pandas最后一篇博文中,我们已经看到了用matplotlib进行绘图的功能,这次更加系统性地学习一下关于matplotlib的功能. matlab由于其拥有强大的显示图表功能而出名: 在python中,就提供了一个类似matlab软件中的画图库matplotlib,其基本上是模仿matlab中的画图函数. 官网中介绍的显示图表的例子见:http://matplotlib.org/gallery/index.html 要使用,就必须先进行安装,安…
什么是二分类问题? 二分类问题就是最终的结果只有好或坏这样的一个输出. 比如,这是好的,那是坏的.这个就是二分类的问题. 我们以一个电影评论作为例子来进行.我们对某部电影评论的文字内容为好评和差评. 我们使用IMDB 数据集,它包含来自互联网电影数据库(IMDB)的 50 000 条严重两极分化的评论.数据集被分为用于训练的 25 000 条评论与用于测试的 25 000 条评论,训练集和测试集都包含 50% 的正面评论和 50% 的负面评论. 加载数据集 import tensorflow.k…
目的 本节我们将介绍如何搭建python的开发环境以及numpy的基本属性,这样可以检验我们的numpy是否安装正确了. python开发环境的搭建 工欲善其事必先利其器,我用得比较顺手的是IntelliJ IDEA的开发环境,这次我也用IDEA的python开发环境来进行开发. 我使用IntelliJ IDEA添加python插件方式进行开发,主要原因是因为我还用它来开发JAVA,因此只要在其中下载python插件就可以. 具体安装插件方式就不细讲了,只放一张截图,大家应该看得明白. 有的同学…
前面我们学习了numpy,现在我们来学习一下pandas. Python Data Analysis Library 或 pandas 主要用于处理类似excel一样的数据格式,其中有表头.数据序列号以及实际的数据,而numpy就仅仅包含了实际的数据. 安装 直接输入: pip3 install pandas 最基本用法 import pandas as pd s = pd.Series([1, 2, 5, 6]) print(s) 输出: 0 1 1 2 2 5 3 6 dtype: int6…
要玩numpy,就得要安装numpy. 安装python 3.6.3 64位 首先需要安装python,安装python的具体方法这里就不细讲了. 可以到官网上下载相应的python版本就可以了,目前我这里安装的是最新版python 3.6.3,64位的.这里需要注意的是python多少位的,好像后面在安装其它模块时就需要注意对应的位数. 如何查看自己电脑是多少位数的? 只要右键我的电脑显示其属性就可以,其中会有信息告诉你的操作系统是32位还是64位.现在的电脑一般都是64位操作系统的. 当然,…
概述 本节主要讲解numpy数组的加减乘除四则运算. np.array()返回的是numpy的数组,官方称为:ndarray,也就是N维数组对象(矩阵),N-dimensional array object. 这个对象的特性跟矩阵的特性也比较接近,因此我这里有时就将其混称为数组/矩阵了. 数组加法 例如: import numpy as np a = np.array([10, 20, 30, 40]) print("a:", a) b = np.arange(4) print(&qu…
概述 本节主要讲述如何把两个数组按照行或列进行合并. 按行进行上下合并 例如: import numpy as np a = np.array([1, 1, 1]) b = np.array([2, 2, 2]) print(np.vstack((a, b))) 合并后输出结果为: [[1 1 1] [2 2 2]] 按列左右合并 import numpy as np a = np.array([1, 1, 1]) b = np.array([2, 2, 2]) print(np.hstack(…
有两个数据集,我们想把他们的结果根据相同的列名或索引号之类的进行合并,有点类似SQL中的从两个表中选择出不同的记录并进行合并返回. 合并 首先准备数据: import pandas as pd import numpy as np data0 = pd.DataFrame(np.ones((3, 4))*0, columns=['a', 'b', 'c', 'd']) data1 = pd.DataFrame(np.ones((3, 4))*1, columns=['a', 'b', 'c',…
本节讲述对于两个数据集按照相同列的值进行合并. 首先定义原始数据: import pandas as pd import numpy as np data0 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'] }) data1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 'C'…
本节主要讲述如何把pandas中的数据用图表的方式显示在屏幕上,有点类似在excel中显示图表. 安装matplotlib 为了能够显示图表,首先需要安装matplotlib库,安装方法如下: pip3 install matplotlib 显示图表 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 产生1000个随机数 data = pd.Series(np.random.rand(1000)) #…