Я следовал этому уроку нейронной сети: https://medium.com/analytics-vidhya/neural-networks-for-digits-recognition-e11d9dff00d5
В сети есть 1 скрытый слой с 25 нейронами. Я хотел попробовать поэкспериментировать с изменением различного количества нейронов в скрытом слое на 10. Я попытался изменить hidden_layer_size
и формировать theta1
и theta2
.
Изначально theta1
имел размер 25x401, я изменил10x401 theta2
имел размер 10x26, я изменил его на 10x11 маленькая диаграмма
Ошибка была: ValueError: cannot reshape array of size 3690 into shape (10,401)
Как мне изменить форму массива так, чтобысеть ведет себя правильно? (изменяемое число нейронов в скрытом слое)
Изменение формы кода использовалось в:
def nnCostFunc(nn_params, input_layer_size, hidden_layer_size, num_labels, X, y, lmbda):
theta1 = np.reshape(nn_params[:hidden_layer_size*(input_layer_size+1)],
(hidden_layer_size, input_layer_size+1), 'F')
theta2 = np.reshape(
nn_params[hidden_layer_size*(input_layer_size+1):], (num_labels, hidden_layer_size+1), 'F')
m = len(y)
ones = np.ones((m, 1))
a1 = np.hstack((ones, X))
a2 = sigmoid(a1 @ theta1.T)
a2 = np.hstack((ones, a2))
h = sigmoid(a2 @ theta2.T)
y_d = pd.get_dummies(y.flatten())
temp1 = np.multiply(y_d, np.log(h))
temp2 = np.multiply(1-y_d, np.log(1-h))
temp3 = np.sum(temp1 + temp2)
sum1 = np.sum(np.sum(np.power(theta1[:, 1:], 2), axis=1))
sum2 = np.sum(np.sum(np.power(theta2[:, 1:], 2), axis=1))
return np.sum(temp3 / (-m)) + (sum1 + sum2) * lmbda / (2*m)