人工神经网络(ANN)相关介绍

人工神经网络

文章目录

      • 人工神经网络
          • 一.概念
          • 1.1 基本特征
          • 1.2 网络模型
          • 1.3 特点及优越性
          • 二.python对sEMG分类实现
          • 总结

一.概念

  神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。

1.1 基本特征

  (1)非线性 具有阈值的神经元构成的网络具有更好的性能,可以提高容错性和存储容量;
  (2)非局限性 联想记忆是非局限性的典型例子;
  (3)非常定性
  (4)非凸性
  人工神经网络是并行分布式系统,克服了传统的基于逻辑符号的人工智能在处理直觉、非结构化信息方面的缺陷,具有自适应、自组织和实时学习的特点。

1.2 网络模型

  目前,已有近40种网络模型,有:反传网络、感知器、自组织映射、Hopfield网络、波耳兹曼机、适应谐振理论等。

1.3 特点及优越性

  (1)具有自学习功能;
  (2)具有联想存储功能;
  (3)具有高速寻找优化解的能力。

二.python对sEMG分类实现

第一种方法是将数据集中的类别转为二进制

import pandas as pd
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import *
from sklearn.metrics import accuracy_score
from keras.utils import np_utils

# 数据集
raw_data = pd.read_csv('1_raw_data_13-12_22.03.16.txt',sep='\t',header=0)  # 读取csv数据,并将第一行视为表头,返回DataFrame类型
data = raw_data.values

times=data[::,0]
features_data = raw_data[['channel2', 'channel8']] 
features = features_data.values

labels = data[::,-1].astype(type)    # 最后一列为特征值

#选取33%数据作为测试集,剩余为训练集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)
# 类别标签独热编码
train_labels = np_utils.to_categorical(train_labels,8)
test_labels = np_utils.to_categorical(test_labels,8)

# 模型结构,采用tanh函数为激活函数,输入层为N个属性
# 下面为4层隐含层,每层的神经元个数依次为500,500,250,250
# 输入层对应N个属性
model = Sequential([
        Dense(500,activation='tanh',input_shape=[2]),  # 输入特征数目为2
        Dense(500,activation='tanh'),
        Dense(250,activation='tanh'),
        Dense(250,activation='tanh'),
        Dense(8, activation='softmax')]) #  输出的类别为8个,所以输出层8个节点

# 编译模型,定义损失函数loss,采用的优化器optimizer为Adam
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

#开始训练模型
model.fit(train_features,train_labels,batch_size=32,epochs=20)  # 迭代20次

y_pre=model.predict(test_features).argmax(axis=1)  # 开始预测,axis=1表示返回每行中数值(表示每个类别的概率)最大的下标,就是对应的标签

score = accuracy_score(test_labels, y_pre)
print("验证集 accuracy_score: %.4lf" % score)

第二种方法:不对数据集中的类别进行处理

import pandas as pd
from sklearn.model_selection import train_test_split

# 数据集
raw_data = pd.read_csv('1_raw_data_13-12_22.03.16.txt',sep='\t',header=0)  # 读取csv数据,并将第一行视为表头,返回DataFrame类型
data = raw_data.values

times=data[::,0]
features_data = raw_data[['channel1', 'channel5']]  
features = features_data.values

# label = data[::,-1]    # 最后一列为特征值
labels = data[:,-1].astype(int)

#选取33%数据作为测试集,剩余为训练集
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size=0.33, random_state=0)

# 特征数据标准化,转换为均值0,标准差为1的分布
mean=train_features.mean(axis=0)
std=train_features.std (axis=0 )
train_features= (train_features-mean) /std
test_features=(test_features-mean) /std

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

# 堆叠若干网络层构建网络
# dense当前层为全连接层
# 64为当前层的节点数
# activate激活函数,之名为tanh
# input_shape输入数据的维度,用元组表示,首层必须说明
# 下述为隐藏层1
model.add(Dense(64,activation='tanh',input_shape=(2,)))
# 下述为隐藏层2
model.add(Dense(128,activation='tanh'))
model.add(Dense(128,activation='tanh'))
model.add(Dense(128,activation='tanh'))
model.add(Dense(128,activation='tanh'))
model.add(Dense(128,activation='tanh'))
model.add(Dense(128,activation='tanh'))
model.add(Dense(128,activation='tanh'))
# 断开一些神经元的链接,防止过度拟合
# 隐藏层随机失活25%,为什么是随机失活,每一次都是随机的?
model.add(Dropout(0.25))
# 增加输出层
# 多类型的输出值,指定激活函数为softmax,返回一个由多个概率值组成的数组,每个概率值表示输出为某类的概率
# 8种类型的输出,
model.add(Dense(8,activation='softmax'))
# 配置网络
# 指定的损失函数是交叉熵损失函数
# 优化参数的方式是梯度下降发
# 监控指标列表
model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=["accuracy"])
model.fit(train_features, train_labels, epochs=10, batch_size=1, verbose=2, validation_data=(test_features, test_labels))

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

## 模型评估
loss, accuracy = model.evaluate(test_features, test_labels, verbose=2)
print("loss ={},accuracy={}".format(loss,accuracy))
总结

通过使用具体的例子来实现ANN,充分了解了人工神经网络相关历史,发展,以及演变的网络;后面会继续更深入地研究相关算法!

你可能感兴趣的:(表面肌电信号处理,分类算法,python,机器学习,深度学习,1024程序员节)