Ниже вы можете найти мой код, который является моим первым серьезным кодом для обучения машинному обучению и Python.Я пытался написать код с нуля, не используя такие библиотеки, как NumPy.Для одиночного ввода и вывода код работает, но когда дело доходит до реальных наборов данных (которые в данном случае представляют собой 784 входа на 10 выходов), он возвращает бесконечность как ошибку.Я проверил все, что я думал, что может быть проблемой без успеха.
Код может быть грязным решением.Я начал с кода с изучения Trask Github и его кода для нескольких работ ввода / вывода, но когда я изменил его, чтобы использовать MNIST, все становится сумасшедшим.Может ли кто-нибудь взглянуть и помочь мне узнать, что мне не хватает и в чем проблема (ы)?Ценится.
for i in range (x_train.shape[0]):
x_labels[i,x_label[i]]=1
def w_sum(a,b):
assert(len(a) == len(b))
output = 0
for i in range(len(a)):
output += (a[i] * b[i])
return output
def neural_network(input1, weights):
pred = vect_mat_mul(input1,weights)
return pred
def vect_mat_mul(vect,matrix):
output = np.zeros(10)
for i in range(10):
output[i] = w_sum(vect[0],matrix[:,i])
return output
def outer_prod(a, b):
out = np.zeros((len(a), len(b)))
for i in range(len(a)):
for j in range(len(b)):
out[i][j] = a[i] * b[j]
return out
(x_train,x_label),(t_test,t_label)=ks.datasets.mnist.load_data()
x_train=x_train.reshape(x_train.shape[0],28*28)
weights=np.random.rand(784,10)
x_labels=np.zeros((x_train.shape[0],10))
alpha = 0.00001
for i in range(x_train.shape[0]):
error = np.zeros(10)
delta = np.zeros(10)
for iter in range(50):
x_train_to_NN = np.array([x_train[i]])
pred = neural_network(x_train_to_NN, weights)
for j in range(10):
error[j] = (pred[j] - x_labels[i, j]) ** 2
delta[j] = pred[j] - x_labels[i, j]
weight_deltas = outer_prod(x_train[i], delta) #calculate the gradient
for idx in range(784):
for jdx in range(10):
weights[idx][jdx] -= alpha * weight_deltas[idx][jdx] #update weight matrix
print('key=', i, '\n Error=', error, '\n Delta=', delta, '\n Prediction=', pred)