Керас нн потери инф / нн - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь разработать приложение hello world для NN в керасе (тензор потока). Я хочу создать базовую модель, которая будет соответствовать уравнению y=0.5+0.5x, я написал этот код

import tensorflow as tf
import numpy as np
from tensorflow import keras
TRAINING_DATA_SIZE = 20
model = keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])]) 
model.compile(optimizer='sgd', loss='mean_squared_error')
xs = np.array(range(TRAINING_DATA_SIZE), dtype=float)
ys = np.array([(0.5 + 0.5 * i) for i in range(TRAINING_DATA_SIZE)], dtype=float)
model.fit(xs, ys, epochs=500)
print(model.predict([7.0]))

однако, если я TRAINING_DATA_SIZE> 10, тогда потеря составляет INF после 100 эпох, и она становится наном через 200 эпох.

Что вызвало это? почему я не могу дать большой набор данных для обучения? спасибо

1 Ответ

0 голосов
/ 27 июня 2019

При скорости обучения sgd по умолчанию оптимизатор полностью выходит за пределы.

Попытка:

model.compile(optimizer='adam', loss='mean_squared_error')

У вас есть один вес и уклон. С небольшой настройкой скорости обучения эта модель сходится за несколько итераций.

Например:

TRAINING_DATA_SIZE = 200

opt=keras.optimizers.Adam(lr=0.1)
model.compile(opt, loss='mean_squared_error')

model.fit(xs, ys, epochs=50, validation_split=0.2, verbose=False)

print('w, b:', model.layers[0].get_weights())
print(model.predict([7.0]))

показывает:

w, b: [array([[0.5000057]], dtype=float32), array([0.49888334], dtype=float32)]

[[3.9989233]]

Что кажется разумным для целевого веса и смещения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...