В общем моя система такая
моя модель ниже
n_hidden = 512
input_shape = 12
input_len = 4
model = Sequential()
model.add(SimpleRNN(n_hidden, input_shape=(input_len, input_shape), return_sequences=False))
model.add(Dense(n_hidden, activation = "linear"))
model.add(Dense(input_shape, activation = "linear"))
opt = Adam(lr=0.001)
model.compile(loss='mse', optimizer=opt)
model.summary()
код предсказания.
in_ = basicdata[0].x[:1]
# in_.shape = (1,4,12)
predicted = []
NUM_DATA = 100
cnt = 0
for i in range(NUM_DATA):
out_ = model.predict(in_)
#it returns only 1 answer.
#out_.shape = (1, 12)
in_ = np.concatenate((in_.reshape(input_shape, input_len)[1:], out_), axis=0).reshape(1, input_shape,input_len)
if cnt == 0:
predicted = out_
else:
predicted = np.concatenate([predicted,out_],axis=0)
cnt = cnt + 1
В этом случае model.predict
принимает (1,4,12)
и возвращает один массив (1, 12)
, но
Я хочу получить (10,12)
несколько кандидатов для выборки.
Я предполагаю, что return_sequences
и batch_size
в simpleRNN связаны, но все еще расплывчаты.
В моем понимании.
return_sequences
return_sequences = False
А,В,С,D => (Е)
return_sequences = True
А,В,С,D => (А,В,С,D,Е)
Я хочу, чтобы это было ниже
А,В,С,D => (Е1,Е2,Е3,Е4,Е5)
batch_size
batch_size
влияет на форму ввода,
Я хочу изменить вывод.
return_sequences = False
(классификатор последовательности):
А,В,С,D => (Е)
return_sequences = True
(классификатор элементов последовательности):
А,В,С,D => (А1,В1,С1,D1)
Если ваша модель была обучена предсказывать следующий символ, то:
А,В,С,D => (В,С,D,Е)
Можно создать модель такого вида:
А,В,С,D => (Е1,Е2,Е3,Е4,Е5)
Это модели seq2seq (например, для перевода, когда длина ввода отличается от длины вывода). Вам нужно создать два RNN: кодировщик и декодер. Насколько я понимаю, это не то, что вы хотите.
batch_size
является параметром обучения и используется для реализации стохастического градиентного спуска.
Большое спасибо за четкое объяснение. Я мог неправильно понять некоторые моменты. А также на следующем этапе мне нужно научиться
seq2seq
.