Прогноз нейронной сети Keras не работает - PullRequest
0 голосов
/ 25 мая 2020

Я хочу написать программу NN для распознавания с помощью Keras.

Я использовал 2 набора данных для обучения:

toyX = [1, 2, 3, 4, 5, 6, 7, 8]
toyX2 = [18, 17, 16, 15, 14, 13, 12, 11].

После обучения с помощью toyX, а затем toyX2, вывод model.predict(toyX) будет [[0.56053144 1.0758346 1.7890009 ]]. Однако это должно было быть [6, 11, 14].

Следует ли мне добавить больше слоев или изменить параметры для улучшения предсказания? Какие параметры мне следует изменить?

Помогите, пожалуйста, решить эту проблему.

from keras.models import Sequential
from keras.optimizers import Adam
from keras.layers import Conv1D, MaxPooling1D
from keras.layers import Dense, Flatten
from keras.layers import Dropout
import numpy as np

model = Sequential()
model.add(Conv1D(filters=64, kernel_size=3, activation='relu', input_shape=(8, 1)))
model.add(Conv1D(filters=64, kernel_size=3, activation='relu'))
model.add(Dropout(0.5))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(100, activation='relu'))
#model.add(Dense(3, activation='softmax'))
model.add(Dense(3))
#model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
print(model.summary())


toyX = np.array([1, 2, 3, 4, 5, 6, 7, 8]).reshape(1, 8, 1)
toyX2 = np.array([18, 17, 16, 15, 14, 13, 12, 11]).reshape(1, 8, 1)
#print (toyX.shape)
toyY = np.array([6, 11, 14]).reshape(1, 3)
#print (toyY.shape)
toyY2 = np.array([1, 2, 3]).reshape(1, 3) # if flatten is active

model.fit(toyX, toyY, epochs = 1000, verbose = 0)
model.fit(toyX2, toyY2, epochs = 1000, verbose = 0)

print (model.predict(toyX))

1 Ответ

1 голос
/ 26 мая 2020

Это явление называется катастрофическим c забыванием нейронных сетей.

Вы можете прочитать статью по этому поводу: https://arxiv.org/pdf/1708.02072.pdf

Ваши toyX и toyX2 имеют совершенно другое распределение. Когда вы повторно тренируете свою модель с ToyX2 в течение 1000 эпох, ваша модель полностью забыла сопоставление от toyX до toyY.

Вы должны тренироваться только в течение очень нескольких эпох с очень небольшой скоростью обучения, если вы хотите убедиться, что знания предыдущих тренировок остались неизменными, или просто смешайте оба подхода и тренируйтесь заново.

...