Нейронная сеть, построенная с нуля с использованием Numpy, не учитсяPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Нейронная сеть, построенная с нуля с использованием Numpy, не учится

Сообщение Anonymous »

Я строю нейронную сеть с нуля, используя только Python и Numpy, она предназначена для классификации набора данных MNIST, я заставил все работать, но сеть на самом деле не учится, в Epoch 0 это точность составляет около 12% после 20 эпох, она увеличивается до 14%, но затем постепенно падает примерно до 12% после 40 эпох. Итак, ясно, что с моим обратным распространением (и да, я попытался увеличить эпохи до 150, но я все еще получаю одинаковые результаты). < /P>
Я фактически следовал этому видео, но я обращался к измерениям по -разному, что привело к тому, что код отличался, он сделал это так, что в результате внесения в колонны - это выборы, но и выборочные, но все, что выборочные, как выборочные, но в то же время. Массивы, чтобы сделать его алгоритм совместимым (я думаю, что это может быть причиной, по которой он не работает).
Загрузка данных:
(x_train, y_train), (x_test, y_test) = mnist.load_data()

x_train, x_test = x_train / 255, x_test / 255
x_train, x_test = x_train.reshape(len(x_train), 28 * 28), x_test.reshape(len(x_test), 28 * 28)
print(x_train.shape) # (60000, 784)
print(x_test.shape) # (10000, 784)

Вот мясо модели:
W1 = np.random.randn(784, 10)
b1 = np.random.randn(10)
W2 = np.random.randn(10, 10)
b2 = np.random.randn(10)

def relu(x, dir=False):
if dir: return x > 0
return np.maximum(x, 0)

def softmax(x):
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum(axis=1, keepdims = True)

def one_hot_encode(y):
y_hot = np.zeros(shape=(len(y), 10))
for i in range(len(y)):
y_hot[y] = 1
return y_hot

def loss_function(predictions, true):
return predictions - true

def predict(x):
Z1 = x.dot(W1) + b1
A1 = relu(Z1)
Z2 = A1.dot(W2) + b2
A2 = softmax(Z2)
# The final prediction is A2 at index 3 or -1:
return Z1, A1, Z2, A2

def get_accuracy(predictions, Y):
guesses = predictions.argmax(axis=1)
average = 0
i = 0
while i < len(guesses):
if guesses == Y:
average += 1
i += 1
percent = (average / len(guesses)) * 100
return percent

def train(data, labels, epochs=40, learning_rate=0.1):
for i in range(epochs):
labels_one_hot = one_hot_encode(labels)

# Forward:
m = len(labels_one_hot)
Z1, A1, Z2, A2 = predict(data)

# I think the error is in this chunk:
# backwards pass:
dZ2 = A2 - labels_one_hot
dW2 = 1 / m * dZ2.T.dot(A1)
db2 = 1 / m * np.sum(dZ2, axis=1)
dZ1 = W2.dot(dZ2.T).T * relu(Z1, dir=True)
dW1 = 1 / m * dZ1.T.dot(data)
db1 = 1 / m * np.sum(dZ1)

# Update parameters:
update(learning_rate, dW1, db1, dW2, db2)

print("Iteration: ", i + 1)
predictions = predict(data)[-1] # item at -1 is the final prediction.
print(get_accuracy(predictions, labels))

def update(learning_rate, dW1, db1, dW2, db2):
global W1, b1, W2, b2
W1 = W1 - learning_rate * dW1.T # I have to transpose it here.
b1 = b1 - learning_rate * db1
W2 = W2 - learning_rate * dW2
b2 = b2 - learning_rate * db2

train(x_train, y_train)

predictions = predict(x_test)[-1]
print(get_accuracy(predictions, y_test)) # The result is about 11.5% accuracy.



Подробнее здесь: https://stackoverflow.com/questions/796 ... t-learning
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Моя нейронная сеть с нуля отказывается сходиться, она прекрасно работает в подаче вперед
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть MNIST с нуля жестко устойчиво при 40% точности
    Anonymous » » в форуме Javascript
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • NN, построенный с нуля с использованием Numpy, не учится
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • NN, построенный с нуля с использованием Numpy, не учится
    Anonymous » » в форуме Python
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Нейронная сеть Numpy не обучается (застряла на точности 10%) – Python
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»