您可以創建一個double數組來保存乙狀結腸值和權重的每一層。例如:
double x = {1,0};
int layer1_input_size = 2; // number of inputs to network
int layer2_input_size = 2; // number of inputs to final layer
int layer1_output_size = 2; // number of outputs to first layer (must match inputs to next layer)
int layer2_output_size = 1; // number of outputs of network
// Initialize arrays to hold the values of outputs and weights for each layer
double sigmoid_layer1[] = new double[layer1_output_size];
double sigmoid_layer2[] = new double[layer2_output_size]
double weights_layer1[] = new double[layer1_input_size];
double weights_layer2[] = new double[layer2_input_size];
// iterate over each neuron in layer1
for(int j = 0; j < sigmoid_layer1.length; j++){
double sum = 0; // sum of weights * inputs (also known as dot product)
for(int i = 0; i < weights_layer1.length; i++){
sum += (x[j] * weights_layer1[i]; // for every weight, multiply by corresponding input to layer
}
sigmoid_layer1[j] = 1/(1 + Math.exp(-sum); // sigmoid activation
}
for(int j = 0; j < sigmoid_layer2.length; j++){
double sum = 0;
for(int i = 0; i < weights_layer2.length; i++){
sum += (sigmoid_layer1[j] * weights_layer2[i]; // same as before, only now the inputs to this layer are the outputs from the previous layer
}
sigmoid_layer2[j] = 1/(1 + Math.exp(-sum);
}
可以使用相同類型的抽象來允許動態數量的圖層。
也許有一點背景可以進一步解釋我的答案: 在神經網絡或多層感知器中,有多組計算單位(神經元)的集合(或層)。一層中的每個神經元都連接到下一層中的每個神經元(至少在最簡單的情況下)。層的輸入是其之前層的輸出,並且第一層的輸入是輸入到您的網絡。
在你的情況(據我所知): 你輸入的X數組英寸所以x [0] = 1是第一個輸入,x [1] = 0是第二個輸入。 您的第一層由sigmoid1和sigmoid2組成。我組合這些並在數組sigmoid_layer1中保存激活函數的輸出。 您的第二層由sigmoid3組成。 sigmoid3的輸入是sigmoid1和sigmoid2的輸出。 sigmoid3的輸出(保存在sigmoid_layer2中)是網絡的輸出。 網絡中權重的數量取決於每個神經元的輸入數量。例如:在第1層中有兩個輸入(x [0]和x [1]),並且有兩個神經元(sigmoid1和sigmoid2)。這意味着您需要4個權重,其中weights_layer1 [0]和weights_layer1 [1]是第一個神經元的權重,而weights_layer1 [2]和weights_layer1 [3]是第二個神經元的權重。
這意味着您的整個網絡使用6個權重。第一層爲4層,第二層爲2層。要手動初始化這些權重(因爲你正在做的),它可以像這樣做:
double weights_layer1[] = {-0.1, 0.4, -0.2, -0.3};
double weights_layer2[] = {-0.2, 0.4};
請注意,沒有靈活性,以初始化權重的數量。如果你使用這種架構(第一層有兩個神經元,第二層有一個神經元),那麼你只能在第一個數組中有4個權重,而在第二個數組中只能有2個權重。
重構出重複 - 使乙狀結腸值和循環數組。 –