神经网络详细教程
从人脑到计算机:神经网络结构
每个人工"神经元"像真实神经元一样,接收多个信号,整合处理后,决定是否"激活"并传递信息。
基础知识
-输入层:相当于感觉神经,接收外界信息 -隐藏层:类似于大脑中的处理区域,负责信息加工(可以有多层) -输出层:如同运动神经,产生最终"反应" -Sigmoid函数:像突触释放神经递质一样,产生平滑的0到1之间的输出 -ReLU函数:更像"全或无"原则,低于阈值不激活,高于阈值则线性激活 -Tanh函数:产生-1到1之间的输出,类似于神经元的超极化和去极化状态 -前向传播:信息的流动 -反向传播:经验的修正
Step 1: 准备数据
伪代码:
import numpy as np
from sklearn.model_selection import train_test_split
patient_data = np.array([[体温, 血压, 心率, ...], ...])
diagnosis = np.array([0或1])
X_train, X_test, y_train, y_test = train_test_split(patient_data, diagnosis, test_size=0.2)
Step 2: 构建训练模型
伪代码:
import tensorflow as tf
model = tf.keras.Sequential([
tf.keras.layers.Dense(16, activation='relu'),
tf.keras.layers.Dense(8, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(
X_train, y_train,
epochs=20,
validation_split=0.2
)
常见问题与解决方案 1."过度诊断"问题(过拟合)就像一位只依赖记忆的医生,可能会过度依赖某些特定病例的特征而失去泛化能力。
(1)接触更多样化的"病例"(增加训练数据) (2)定期"考核"(验证集评估) (3)"遗忘"一些细节以保留关键特征(Dropout技术)
2."犹豫不决"问题(低收敛性) 有时模型会像犹豫不决的实习医生一样难以达成明确诊断。而且会跑的很慢很慢,甚至无法结束工作,被迫加班hh
(1)调整学习率 (2)选择更合适的"思考方式"(优化器) (3)提供更清晰的反馈(调整损失函数)