深度学习:卷积神经网络(基础知识+iris实现)

链接:

1. 卷积神经网络详细介绍

2. 手写数字识别

卷积的实现:

  • 原像素(由三个矩阵RGB通道构成的,元素均取值0-255)通过与卷积核进行对应位置相乘后相加的运算,形成新的卷积层

卷积价值:

  • 通过使用多个卷积核,可以自动生成多种新特征(第一层卷积层可能智能提取一些低级的特征如边缘、线条和角)
  • 通过使用多个卷几层,已生成的特征可以进行更复杂的排列组合,生成更深层次的特征。
  • 卷积运算的重要特点:通过卷积运算,可以使原信号特征增强,并且降低噪音。

之前图像处理的缺陷及应对:

  • 相对于之前的BP神经网络,全连接的方式权值太多,那要很多样本去训练,计算困难。因而采用减少权值的尝试,局部连接,权值共享。

CNN的局部感知结构

  • 图像的空间联系局部的像素联系较为紧密,距离较远的像素相关性则较弱
  • 因而每个神经元其实不需要对全局图像进行感知,只需要对局部进行感知,然后再更高层将局部信息综合起来就可以得到全局信息。

CNN多卷积核:

  • 一个卷积的操作只对应了一种特征,各卷积核的具体权重则通过迭代进行估计。 实际操作中,多少个卷积核就能够对应提取多少种特征。

CNN的基本组件:

  1. 卷积层(Convolutional layer)(激活函数、卷积运算,可以从原始数据提取不同特征供后续分析,层数越高,特征越全局化)
  2. 池化层(平均池化、最大化池化)
  3. 全连接层(在后面的层由于每一层节点个数比较少,所以近乎采取全连接)

池化层:

  • 即:汇总/下采样,其作用是减小数据处理量的同时保留有用信息(卷积后数据量暴增)
  • 相邻区域的特征是类似的,因此可以考虑选出最能表现相邻区域特征的像素,从而缩减数据量(压缩图像)
  • 将特征切成几个区域,取其最大值或平均值,得到新的特征
from keras.models import Sequential
from keras.layers import Dense,Activation

Keras基本操作:模型的设定方式

#方式一:直接传递网络层实例列表
model=Sequential([
    Dense(32,input_shape=(784,)), Activation('relu'),
    Dense(10), Activation('softmax'),
])
#方式二:使用.add()方法依次添加各层
model=Sequential()
model.add(Dense(32,input_dim=784))
model.add(Activation('relu'))

IRIS实例

1.数据的导入,以及测试集、训练集的划分

#导入iris数据集,导入并切分数据
from sklearn import datasets
from sklearn.model_selection import train_test_split
iris=datasets.load_iris()
x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.3,random_state=666)
#去除30%作为测试集
print('训练集长度:{}'.format(len(x_train)))
print('测试集长度:{}'.format(len(x_test)))

训练集长度:105
测试集长度:45

2.训练集以及测试集进行标准化

#引入iris并标准化
#对训练集自变量做标准化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
iris_train = scaler.fit_transform(x_train)
iris_test = scaler.fit_transform(x_test)
#用以展示数据,可以看训练集的标准化
print(iris_train)
print('-'*20)
print(iris_train.shape)

3.因变量(3种花的种类)进行哑变量的转换

#使用keras拟合
#将因变量转换为哑变量组(哑变量,用以反映质的属性的一个人工变量,是量化了的自变量,通常取
#值为0或1。引入哑变量可使线形回归模型变得更复杂,但对问题描述更简明,一个方程能达到两个方
#程的作用,而且接近现实。
from keras.utils import to_categorical
# 将因变量转换为哑变量组
y = to_categorical(y_train)
# 查看前五个因变量的值
print(y[:5])

[[1. 0. 0.]
[1. 0. 0.]
[1. 0. 0.]
[0. 1. 0.]
[1. 0. 0.]]

4.建立神经网络模型并进行训练

#建立网络并训练模型
from keras.models import Sequential
from keras.layers import Dense

"""
添加三层。
第一层激活函数选择sigmoid;
第二层激活函数选择tanh;
第三层激活函数选择softmax。
"""
model = Sequential()
model.add(Dense(6, input_dim = 4, activation = 'sigmoid'))
model.add(Dense(5,activation='relu'))
model.add(Dense(4, activation = 'tanh'))
model.add(Dense(3, activation = 'softmax')) # softmax保证输出在[0,1]范围内
"""损失函数loss选择categorical_crossentropy;
优化器optimizer选择rmsprop;
评估标准metrics选择accuracy。"""
model.compile(loss = 'categorical_crossentropy',
              optimizer = 'rmsprop',
              metrics = ['accuracy'])
# 模型的训练
hist=model.fit(iris_train, y, epochs = 200)

5.模型的评价

#模型评价以及效果评价
model.summary()
scores = model.evaluate(iris_train, y)
print("测试集损失函数:%f,预测准确率:%2.2f%%" % (scores[0],scores[1] * 100))
105/105 [==============================] - 0s 380us/step
测试集损失函数:0.286841,预测准确率:91.43%

6.模型的预测

#模型的预测
result = model.predict(iris_test)
print(result)
print('-'*20)
print(result.shape)
print(hist.history)

7.可视化展示

from matplotlib import pyplot as plt

plt.plot(hist.history['acc'],c='purple',alpha=0.3)

# 使用第二Y轴
ax2 = plt.gca().twinx()
plt.plot(hist.history['loss'],c='red',alpha=0.5)
plt.show()

深度学习:卷积神经网络(基础知识+iris实现)_第1张图片

你可能感兴趣的:(深度学习:卷积神经网络(基础知识+iris实现))