如何在无隐藏层的神经网络中使用3个神经元开展训练?
无隐藏层多神经元感知机实现说明
你提供的是单神经元感知机的经典可视化示例:
核心结论
可以在不添加隐藏层的情况下实现3个或5个神经元的训练,仅需调整输出层的神经元数量以及对应的权重矩阵维度即可。
结构逻辑
通常神经元计数不包含仅负责透传输入数据的输入层节点,无隐藏层的感知机所有可训练神经元都集中在输出层:
- 你当前的代码是3输入→1个输出神经元的结构,对应权重矩阵维度为
(3,1),总计3个可训练权重 - 如需使用3个神经元训练,仅需将权重矩阵维度调整为
(3,3),总计9个可训练权重,3个输入节点会分别和每个输出神经元连接 - 如需使用5个神经元训练,将权重矩阵维度调整为
(3,5)即可
扩展为多神经元后,相当于在原有单输出神经元的位置并列摆放3/5个结构完全相同的神经元,每个神经元都独立接收3个输入的信号、独立计算输出,不存在额外的隐藏层。
如果你的需求是保持最终只有1个输出,同时中间用3/5个神经元做特征处理,那么必须添加隐藏层,无隐藏层的网络没有中间神经元的部署位置。
3神经元无隐藏层参考代码
import numpy as np def tanh(x): return (np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x)) def tanh_derivative(x): return 1-x**2 # 3维度输入,共8组训练样本 training_inputs = np.array([[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]) # 3维度输出,对应3个输出神经元的预期结果 training_outputs = np.array([ [1,0,0], [0,1,0], [0,0,1], [1,1,0], [0,1,1], [1,0,1], [1,1,1], [0,0,0] ]) # 3输入3输出的权重矩阵,共3*3=9个可训练权重 synaptic_weights = 2 * np.random.random((3, 3)) - 1 print('随机初始化权重 :{}'.format(synaptic_weights)) for i in range(20000): input_layer = training_inputs outputs = tanh(np.dot(input_layer, synaptic_weights)) error = training_outputs - outputs weight_adjust = error * tanh_derivative(outputs) synaptic_weights += np.dot(input_layer.T, weight_adjust) print('训练后权重: {}'.format(synaptic_weights)) print('\n') print('训练后输出结果 :\n{}'.format(outputs))
内容的提问来源于stack exchange,提问作者Parzival
相关产品推荐
相关产品推荐

