作者简介:Java、前端、Python开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、Python项目开发、大学数据和AI项目开发、单片机项目设计、面试技术整理、最新技术分享
收藏点赞不迷路 关注作者有好处
文末获得源码
基本概念:
全连接神经网络(Fully Connected Neural Network,简称FCNN)是一种基础的人工神经网络结构。以下是关于全连接神经网络的详细解释:
一、基本概念
全连接神经网络也被称为多层感知器(Multilayer Perceptron,MLP)。在这种网络中,每个神经元与前一层和后一层的所有神经元相连接,形成一个密集的连接结构。它能够学习输入数据的复杂特征,并进行分类、回归等任务。
二、网络结构
全连接神经网络通常由多个层组成,包括输入层、隐藏层和输出层。输入层负责接收原始数据输入,每个输入特征对应一个输入节点。隐藏层位于输入层和输出层之间,可以包含多个层,每个隐藏层由多个神经元组成。输出层则负责输出神经网络的预测结果。
三、工作原理
全连接神经网络的工作原理基于反向传播算法。在训练过程中,网络首先通过前向传播计算预测结果,并计算预测值与真实值之间的误差。然后,通过反向传播计算梯度并更新网络中的权重和偏置,以最小化误差函数。这个过程会不断迭代,直到网络达到较好的预测性能。
四、激活函数与权重更新
在全连接神经网络中,每个神经元都带有一个激活函数,用于引入非线性性,允许神经网络学习复杂的函数映射。常见的激活函数包括Sigmoid、ReLU、tanh等。此外,每个连接都有一个权重值,表示连接的强度。权重值在网络训练过程中更新,以使神经网络能够学习到合适的特征表示和模式。
五、优缺点及应用
全连接神经网络具有强大的特征学习能力,但在处理大规模数据时可能会面临过拟合、计算资源消耗大等问题。为了解决这些问题,人们开发了更复杂的神经网络结构,如卷积神经网络(CNN)和循环神经网络(RNN)。然而,全连接神经网络在计算机视觉、语音识别等领域仍然有着广泛的应用基础,特别是在一些需要全局特征处理的场景中。
综上所述,全连接神经网络是一种基础且重要的人工神经网络结构,具有强大的特征学习能力和广泛的应用前景。
本案例依据乳腺癌检测数据集,使用全连接神经网络实现数据检测模型训练与测试,最终检测出乳腺癌症患者。
模型训练:
#使用全连接神经网络来实现乳腺癌判断
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
import keras
from keras.layers import Dense
from keras.utils.np_utils import to_categorical
from sklearn.metrics import classification_report
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取数据
dataset = pd.read_csv("breast_cancer_data.csv")
#print(dataset)
#提取X 特征
X = dataset.iloc[:, :-1]
#print(X)
#提取Y 标签(分类结果)
Y = dataset['target']
#print(Y)
#划分测试集和数据集
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=42)
# 绘制训练集和验证集的loss值对比
plt.plot(history.history['loss'], label='train')
plt.plot(history.history['val_loss'], label='val')
plt.title("全连接神经网络loss值图")
plt.legend()
plt.show()
# 绘制训练集和验证集的准确率的对比图
plt.plot(history.history['accuracy'], label='train')
plt.plot(history.history['val_accuracy'], label='val')
plt.title("全连接神经网络accuracy值图")
plt.legend()
plt.show()
训练结果通过图形化来进行展示结果如下:
并将训练的模型保存为:model.h5
下面使用训练的数据模型来进行数据测试:
#使用全连接神经网络来实现乳腺癌判断
import numpy as np
import pandas as pd
import matplotlib.pylab as plt
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
import keras
from keras.layers import Dense
from keras.utils.np_utils import to_categorical
from sklearn.metrics import classification_report
from keras.models import load_model
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#读取数据
dataset = pd.read_csv("breast_cancer_data.csv")
#print(dataset)
#提取X 特征
X = dataset.iloc[:, :-1]
#print(X)
#提取Y 标签(分类结果)
Y = dataset['target']
#print(Y)
#划分测试集和数据集
x_train,x_test,y_train,y_test=train_test_split(X,Y,test_size=0.2,random_state=42)
#将数据标签转换为one-hot向量模式
y_test_one = to_categorical(y_test,2)
#进行数据的归一化
sc = MinMaxScaler(feature_range=(0,1))
x_test = sc.fit_transform(x_test)
# 导入训练好的模型
model = load_model("model.h5")
# 利用训练好的模型进行测试
predict = model.predict(x_test)
# print(predict)
#得到预测结果
y_pred = np.argmax(predict, axis=1)
# print(y_pred)
# 将识别的结果转化成汉字
result = []
for i in range(len(y_pred)):
if y_pred[i] == 0:
result.append("良性")
else:
result.append("恶性")
# print(result)
# 打印模型的精确度和召回
report = classification_report(y_test, y_pred, labels=[0, 1], target_names=["良性", '恶性'])
print(report)
测试结果如下:
precision recall f1-score support
良性 0.99 0.93 0.96 71
恶性 0.89 0.98 0.93 43
accuracy 0.95 114
macro avg 0.94 0.95 0.94 114
weighted avg 0.95 0.95 0.95 114
六、相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统