人工智能:手把手教你搭建多层神经网络
简介1、在上一篇文章中已经介绍需具备的基本知识以及工具如何安装,不明白的小伙伴可以去我博客主页查看,在这里就不过多叙述2、基本知识一定要去了解,深入理解代码底层的原理一、导入相关包1、tensorflow包作用:引入神经网络2、matplotlib.pyplot包作用:绘图3、numpy包作用:矩阵的相关运算代码如下:#首先导入tensorflow包、numpy包、matplotlib包impor
·
简介
1、在上一篇文章中已经介绍需具备的基本知识以及工具如何安装,不明白的小伙伴可以去我博客主页查看,在这里就不过多叙述
2、基本知识一定要去了解,深入理解代码底层的原理
一、导入相关包
1、tensorflow包
作用:引入神经网络
2、matplotlib.pyplot包
作用:绘图
3、numpy包
作用:矩阵的相关运算
代码如下:
#首先导入tensorflow包、numpy包、matplotlib包
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
二、加载数据
注意:目前大家先用.csv文件(当然这里面要存入数据),后期会专门会讲解如何用其它格式的文件(例如,txt格式等)。
作用:机器学习三步走(数据+模型+硬件),模型可以拿别人训练好的且非常完美的模型,硬件可以买高配置的(GPU跑更好),但是数据不是唯一的,也是最重要的,需要大家去一点一点的收集,最后你会发现,数据集对训练结果有很大影响(建议大家去专门的网站去下载数据,例如一个城市的新冠患病人数与哪些因素有关的数据,如果这些数据是公开的,大家也可以通过python去爬,当然这些数据如果是不公开的,大家就不要去爬了,做一个合法的公民!)
代码如下:
#加载数据
data=np.loadtxt("./xxxxxxx/yyyyyyy.csv",delimiter=',') #参数大家可以自行去参考即可,不懂的可以在博客下方评论即可
二、打印查看数据
作用:方便查看(并不是必要的步骤),如果数据集的结果并不是该模型结果范围内,大家需要去进行归一化处理。
代码如下:
#打印数据看看
x=data[:,0:15] #打印所有行,打印所有0-14列
y=data[:,15] #打印所有行,打印第15列
#因为训练集y中有-1,所以我们需要进行归一化处理,将-1替换为0
y[y==-1]=0 #y==-1就将-1替换为0
# print("x=",x) #这里可以打印x的数据
# print("y=",y) #这里可以打印y的数据
三、建立神经网络模型
作用:建立神经网络指定神经网络的输入、层数、神经元的个数、输出等
代码如下:
#建立模型,逻辑回归相当于是在线性回归的输出加上一个sigmoid函数
model = tf.keras.Sequential() #建立序列模型/线性模型,例如:f(x)=ax+b
#设置神经网络的输入层、隐藏层、输出层,此处还是使用全连接层
model.add(tf.keras.layers.Dense(4 , input_shape=(15,) , activation = 'relu')) #隐藏层 ,4个神经元 , 输入为一维15个 ,激活函数为relu
model.add(tf.keras.layers.Dense(4 , activation = 'relu')) #隐藏层 ,4个神经元 , 输入会自动推导,不需要在这里写明输入,激活函数为relu
# model.add(tf.keras.layers.Dense(4 , activation = 'relu'))
# model.add(tf.keras.layers.Dense(4 , activation = 'relu'))
model.add(tf.keras.layers.Dense(1 , activation = 'sigmoid'))#输出层,1个神经元 , 激活函数sigmoid将结果转换为0-1之间的概率值
四、查看神经网络模型
作用:更方便的看神经网络是否是全连接、可训练的参数、层数等、
代码如下:
#查看神经网络模型
model.summary()
五、配置或编译
作用:指定优化器、损失函数、评估等
代码如下:
#配置或编译神经网络
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc']) #binary_crossentropy交叉熵损失函数,一般用于二分类
六、训练神经网络
作用:让神经网络自主学习并总结输入数据的一些特征,为预测做准备
代码如下:
#训练神经网络
logs = model.fit(x,y,epochs = 10) #可以根据需要,通过epochs指定训练的次数
七、绘制图形
作用:绘制图形更直观的看神经网络的训练效果如何
代码如下:
#绘制图形更直观的展示
plt.plot(logs.epoch , logs.history.get('loss'), logs.history.get('acc'))
或者
plt.plot(logs.epoch , logs.history.get('acc'))
八、预测
作用:神经网络经过训练之后就可以进行预测(给定相应的输入即可)
代码如下:
#训练之后就可以进行预测
result = model.predict([[0,35.6,0,0,0,1.5,6,7,0,1,1,1,15.6,1,0]])
print(result)
训练结果如下:
[[0.49033508]]
九、总结
1、此次用的模型是逻辑回归模型,如何看出?loss='binary_crossentropy’和activation = 'sigmoid’这里可以看出,大家只需要知道逻辑回归其实就相当于是在线性回归的基础之上加了一个sigmoid函数。
2、逻辑回归问题把可能的结果压缩到[0,1]之间,通过概率来表示,这就是为什么要使用sigmoid函数(因为它是S型曲线,取值结果在0到1之间),大家可以下去了解以下。
3、训练的结果跟你的数据集有很大关系,所以大家一定要找好数据集,而不是自己随机跟神经网络投喂一些数据。
4、神经网络的层数以及神经元的个数都对训练的结果有很大的关系(所以并不是神经元越多越好,也并不是神经网络的层数越多越好),神经网络层数越多和神经元越多会导致整个网络直接学傻了,即,本来是简单的1+1=2的关系,但是牵扯到很多的问题,牵扯过多,神经网络学傻了,就直接认为1+1=王(滑稽.jpg),所以大家一定要把握好尺度。
5、本次模型的实例是用的信用卡欺诈问题
更多推荐
所有评论(0)