栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

keras ANN 分类实战

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

keras ANN 分类实战

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from keras.utils import np_utils

## 数据准备
# 读入数据文件
# pandas库的读取文件,header指明引入的文档是没有的列的,自动编号
data=pd.read_csv('iris.txt',header=None,sep=' ').values
data=data[:,1:6]
data=pd.Dataframe(data)
#data = pd.read_csv('iris.txt', header = None)
# 指定数据的各个列的代表的数据,花萼长度,花萼宽度,花瓣长度,花瓣宽度,种类,设置各个类的标签属性
data.columns = ['sepal length', 'sepal width','petal length','petal width','class']
# 查看5前五条数据
# loc是以列名和行名作为参数,进行返回的
# iloc是以索引作为参数进行返回地
print(data.iloc[0:5,:])

# 数据特征x取值于前四列
X = data.iloc[:,0:4].values.astype(float)
# 将类名转换为整数
data.loc[data['class'] == 'setosa','class'] = 0
data.loc[data['class'] == 'versicolor','class'] = 1
data.loc[data['class'] == 'virginica','class'] = 2
# 标签y取值于第四列
# 将第四列取出来,作为int型
y = data.iloc[:,4].values.astype(int)
# 分割数据为训练集和测试集
# 八成为训练集,两成为测试集
train_x,test_x,train_y,test_y = train_test_split(X,y,train_size=0.8,test_size=0.2,random_state=0)

# 特征数据标准化,转换为均值0,标准差为1的分布
mean=train_x.mean(axis=0)
std=train_x.std (axis=0 )
train_x= (train_x-mean) /std
test_x=(test_x-mean) /std
print (train_x[0 : 5, : ])

# 类别标签独热编码
train_y_ohe = np_utils.to_categorical(train_y,3)
test_y_ohe = np_utils.to_categorical(test_y, 3)
print("前5条测试数据标签值:", test_y[0:5])
print('前五条测试数据标签的独热码:n',test_y_ohe[0:5])


##搭建模型

from keras.models import Sequential
from keras.layers import Dense,Dropout
# 构建一个模型对象
model = Sequential()

# 堆叠若干网络层构建网络
# dense当前层为全连接层
# 16为当前层的节点数
# activate激活函数,之名为relu
# input_shape输入数据的维度,用元组表示,首层必须说明
# 下述为隐藏层1
model.add(Dense(16,activation='relu',input_shape=(4,)))
# 下述为隐藏层2
model.add(Dense(16,activation='relu'))
model.add(Dense(16,activation='relu'))
model.add(Dense(16,activation='relu'))
model.add(Dense(16,activation='relu'))
model.add(Dense(16,activation='relu'))
model.add(Dense(16,activation='relu'))
model.add(Dense(16,activation='relu'))
# 断开一些神经元的链接,防止过度拟合
# 隐藏层随机失活25%,为什么是随机失活,每一次都是随机的?
model.add(Dropout(0.25))
# 增加输出层
# 多类型的输出值,指定激活函数为softmax,返回一个由多个概率值组成的数组,每个概率值表示输出为某类的概率
# 三中类型的输出,
model.add(Dense(3,activation='softmax'))

# 配置网络
# 指定的损失函数是交叉熵损失函数
# 优化参数的方式是梯度下降发
# 监控指标列表
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=["accuracy"])



model.fit(train_x, 
                         train_y_ohe, 
                         epochs=50
                   , batch_size=1, 
                   verbose = 2, 
                   validation_data = (test_x, test_y_ohe))

# 返回记录的是各轮训练的情况,时间,训练集损失值,训练集精确度,验证集损失值,验证集精确率

## 模型评估
loss, accuracy = model.evaluate(test_x, test_y_ohe, verbose=2)
print("loss ={},accuracy={}".format(loss,accuracy))

# 模型预测
classes = model.predict(test_x, batch_size=1, verbose=2)
print("测试样本数: ",len(classes))
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/588947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号