Я здесь, потому что я работаю над университетским проектом, и мне нужно создать прогностическую модель, которая использует входные данные различной длины и пытается предсказать следующую.
ES: X1, X2,.., Xn // серия
Y = Xn + 1
Входные данные - это вложения предложений Джобса. Для каждой работы у меня есть вектор с 4196 элементами. Я создал свой набор данных из списка DataFrame, который содержит два столбца: UserID , JobPosting . Каждая таблица содержит только одного пользователя, поэтому этот столбец будет отброшен, а задания предварительно преобразованы во вложения. Код, который создает X и Y:
dataset = [] # Where I want store X
Y_dataset = [] # Where I want store Y
i=0
#test is a numpy array and each element is DataFrame containing
#UserID and JobTitle (The embeddings of them)
for table in test:
# Now I keep only JobTitles and I turn it to a ndarray
tmp = table.drop(columns=['UserID'])['JobTitle'].values
# I take out the last value from table. It's gona be my Y
y = table.tail(1)['JobTitle'].values.tolist()
t = []
for v in tmp:
if type(v) != str and len(v) == 4196: # Just a check
t.append(v)
dataset.append(t)
Y_dataset.append(y[0])
i += 1
Теперь у меня есть два набора данных: набор данных и Y_dataset После этого я разделил их на Train, dev инабор тестов:
size = len(dataset)
split_point = size / 3 * 2
full_train_set, test_set = dataset[:int(split_point)], dataset[int(split_point):]
full_Y, test_Y = Y_dataset[:int(split_point)], Y_dataset[int(split_point):]
train_size = len(full_train_set)
split_point = train_size / 100 * 10
dev_set, train_set = full_train_set[:int(split_point)], full_train_set[int(split_point):]
dev_Y, train_Y = full_Y[:int(split_point)], full_Y[int(split_point):]
print("Traing Set Size: " + str(len(train_set)))
print("Dev Set Size: " + str(len(dev_set)))
print("Test Set Size: " + str(len(test_set)))
Теперь я создаю свою модель следующим образом:
embeds_size = 4196
model = keras.models.Sequential()
model.add(keras.layers.SimpleRNN(1024, input_shape=(None,embeds_size), activation='relu'))
model.add(keras.layers.Dense(4196, activation='softmax'))
model.build()
model.summary()
Я скомпилировал с adam и kullback_leibler_divergence as Lossфункция. Но когда я пытаюсь начать поезд:
model.fit(train_set, train_Y, epochs=50, batch_size=100)
Ошибка возникает
ValueError: Error when checking input: expected simple_rnn_23_input to have 3 dimensions, but got array with shape (7, 4196)
Не могли бы вы объяснить, почему это происходит? Спасибо:)