Iam tyring для реализации простой модели RNN LSTM, но завис. Сама проблема проста. Я буду давать 5 последовательных цифр модели (но 1 цифру за раз), а затем я хочу, чтобы модель предсказывала шестую.
Пример:
Входные данные: 1, 2, 3, 4, 5 (1 цифра на каждом временном шаге)
И вывод для этой последовательности должен быть 6 .
У меня есть CSV-файл, в котором:
- Первый ряд - заголовки
- Есть 6 столбцов
- Первый столбец - только идентификатор. Не используется в обучении.
- Следующие 5 столбцов являются входными данными (x)
- И последний столбец - метка (у)
Я хочу разработать модель с Keras и заставить ее успешно угадать 6-е число.
Вот что я делаю:
1) Сначала реализуем некоторые необходимые нам константы.
NR_FEATURES = 5
ITERATOR_BATCH_SIZE = 1
NR_EPOCHS = 15
2) Определите генератор, который будет использоваться при обучении.
def train_data_generator():
dataset = tf.contrib.data.make_csv_dataset(train_path1,
batch_size=ITERATOR_BATCH_SIZE,
num_epochs=NR_EPOCHS,
shuffle=True)
iter = dataset.make_one_shot_iterator()
next = iter.get_next()
ID = next['ID']
features = [next['nr1'], next['nr2'], next['nr3'], next['nr4'], next['nr5']]
features = tf.reshape(features, [NR_FEATURES, 1])
label = next['next_nr']
yield (features, label)
3) Создайте модель и начните тренировку.
input_data = Input(shape=(5, 1), name='input_data')
layer1_out = LSTM(1, return_sequences=False)(input_data) # only return the last output
lstm_model = Model(inputs=input_data, outputs=layer1_out)
lstm_model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['accuracy'])
lstm_model.fit_generator(train_data_generator(),
steps_per_epoch=(150/ITERATOR_BATCH_SIZE),
epochs=NR_EPOCHS,
verbose=1)
Но он сразу падает ...
Я получаю сообщение об ошибке:
Epoch 1/15
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-af9dcbcbe289> in <module>()
8 steps_per_epoch=(150/ITERATOR_BATCH_SIZE),
9 epochs=NR_EPOCHS,
---> 10 verbose=1)
~/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/legacy/interfaces.py in wrapper(*args, **kwargs)
89 warnings.warn('Update your `' + object_name +
90 '` call to the Keras 2 API: ' + signature, stacklevel=2)
---> 91 return func(*args, **kwargs)
92 wrapper._original_function = func
93 return wrapper
~/anaconda3/envs/tensorflow/lib/python3.6/site-packages/keras/engine/training.py in fit_generator(self, generator, steps_per_epoch, epochs, verbose, callbacks, validation_data, validation_steps, class_weight, max_queue_size, workers, use_multiprocessing, shuffle, initial_epoch)
2212 # build batch logs
2213 batch_logs = {}
-> 2214 if x is None or len(x) == 0:
2215 # Handle data tensors support when no input given
2216 # step-size = 1 for data tensors
TypeError: object of type 'Tensor' has no len()
Я просто не понимаю. У кого-нибудь есть идеи?