以1个输入层、1个隐藏层和1个输出层为例,分析编程中变量的维度。
初始化:
w1的维度: 隐藏层节点个数 *特征个数
b1的维度: 1 * 隐藏层节点个数
w2的维度: 输出层节点个数 * 隐藏层节点个数
b2的维度: 1 * 输出层节点个数
前向传播:
Train_data 特征数量 * 样本数量
z1 = w1 * Train_data 隐藏层节点个数 * 样本数量
a1 : z1 隐藏层节点个数* 样本数量
z2 = w2 * a1 输出层节点个数 * 样本数量
a2 : z2 输出层节点个数 * 样本数量
y : a2 输出层节点个数 * 样本数量
z1 = w1 * train_data + b1;
a1 = sigmoid(z1);
z2 = w2 * a1 + b2;
a2 = sigmoid(z2);
反向传播:
da2 = dAL 输出层节点个数* 样本数量 如果cost function等于y,则是这种情况
s2 = 1/(1+np.exp(-z2)) 输出层节点个数* 样本数量
dz2 = da2 .* s2 .* (1-s2) 输出层节点个数* 样本数量 不是点积,是按相同位置相乘。 s2 .* (1-s2)为sigmoid的导数
dw2 &#