public CNNLayer(int nodeNum, ACTIVE_FUNCTION af = ACTIVE_FUNCTION.RELU) { mAFuction = af; mNodeNum = nodeNum; Random r = new Random(); mB = Matrix <double> .Build.Dense(nodeNum, 1, (i, j) => r.NextDouble()); mZ = Matrix <double> .Build.Dense(nodeNum, 1, (i, j) => r.NextDouble()); mA = Matrix <double> .Build.Dense(nodeNum, 1, (i, j) => r.NextDouble()); }
public static Matrix <double> getActiveValMatrix(Matrix <double> m, ACTIVE_FUNCTION af) { Matrix <double> re = Matrix <double> .Build.DenseIdentity(m.RowCount, m.ColumnCount); try { re = Matrix <double> .Build.Dense(m.RowCount, m.ColumnCount, (i, j) => getActiveVal(m.Row(i)[j], af)); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } return(re); }
public static double getActiveVal(double z, ACTIVE_FUNCTION af) { double re = 0.1; try { if (af == ACTIVE_FUNCTION.RELU) { /* * a = g(z) = max(0,z) * dz = 0/1 */ if (z > 0) { re = z; } else { re = 0; } } if (af == ACTIVE_FUNCTION.LOGI) { /* * a = g(z) = 1/(1+e(-z)) * dz = a(1-a) */ re = 1 / (1 + Math.Exp(-z)); } } catch (Exception ex) { MessageBox.Show(ex.ToString()); } return(re); }