神经网络Keras的预测不起作用

问题描述 投票:0回答:1

我想编写一个使用Keras进行识别的NN程序。

我已使用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))
python keras conv-neural-network
1个回答
0
投票

这种现象称为神经网络的灾难性遗忘。

您可以阅读以下文章:https://arxiv.org/pdf/1708.02072.pdf

您的toyXtoyX2具有完全不同的分布。当您用ToyX2重新训练模型1000个时间段时,您的模型完全忘记了从toyXtoyY的映射。

如果您想确保先前训练的知识能够保留下来,或者只是将两者结合再训练,就应该只以很少的学习率训练很少的时期。

© www.soinside.com 2019 - 2024. All rights reserved.