#python #tensorflow #keras #lstm
#python #тензорный поток #keras #lstm
Вопрос:
Я пытаюсь использовать данные отслеживания НФЛ, чтобы предсказать результаты атакующего метража в конце игры. Чтобы сделать это, мой ввод выдаст train_x, содержащий массив данных отслеживания для 1 воспроизведения в паре с float в y_train, который имеет результат yardage.
Как я должен упорядочить свои данные для обучения модели LSTM? Я пытался использовать этот учебник, но он не использует 3D-ввод. Может ли модель LSTM справиться с тем, что я пытаюсь сделать?
До сих пор я пробовал это:
def isolatePlay(data, gameNum, playNum):
MAX_X_YARDS = 120
MAX_Y_YARDS = 53.3
d = data[data['gameId'] == gameNum]
d = d[d['playId'] == playNum].fillna(0)
#normalize x ,y...
sub = d[["x","y", "s", "a", "dis", "o", "dir"]].to_numpy()
norm = Normalizer().fit(sub)
return norm.transform(sub)
print("creating ML training, test, and validation datasets")
first = True
for rows in plays.itertuples():
#print(getattr(rows, 'gameId'), gameMax)
play = isolatePlay(week, getattr(rows, 'gameId'), getattr(rows, 'playId'))
if (first):
x = [play]
y = [[getattr(rows, 'offensePlayResult')]]
first = False
else:
x.append(play)
y.append([getattr(rows, 'offensePlayResult')])
train_x, test_x, train_y, test_y = train_test_split(np.array(x), np.array(y), test_size=0.3)
test_x, val_x, test_y, val_y = train_test_split(test_x, test_y, test_size=0.5)
print("x data:[0]", train_x[0])
print("x data:[1]", train_x[1])
print("ML Dataset Preparation Complete")
# create the model
embedding_vecor_length = 32
model = Sequential()
model.add(LSTM(100))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(train_x, train_y, validation_data=(val_x, val_y), epochs=3, batch_size=64)
print(model.summary())
# Final evaluation of the model
scores = model.evaluate(test_x, test_y, verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
но это не сработало
ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list).
Я полагаю, что это как-то связано с изменением формы моего ввода в форму [образцы, временной интервал, функции], но я не уверен, что это означает для 3D-ввода. Временные интервалы находятся внутри данных отслеживания, и количество объектов отличается от количества строк данных отслеживания (~ 1500 строк на 1 результат). Любые ссылки на проекты нейронных сетей, включающие аналогичное измерение данных в качестве входных данных, будут оценены, поскольку у меня возникли проблемы с поиском.
Пьесы, в которых я прохожу, выглядят примерно так.
shape (1296, 7)
normalized tracking data
[[ 1.50585604e-01 9.04000519e-02 3.59760829e-03 ... 3.51645923e-04
7.88471309e-01 5.89439716e-01]
[ 2.58656328e-01 1.55707513e-01 1.74663657e-03 ... 5.13716639e-04
5.48443883e-01 7.79770486e-01]
[ 1.55811974e-01 1.32418437e-01 1.44941371e-04 ... 0.00000000e 00
2.80084706e-01 9.37944603e-01]
...
[ 6.18136846e-01 5.88895155e-03 1.02887429e-02 ... 1.35378197e-03
3.76622143e-01 6.89278088e-01]
[ 3.58395476e-01 1.52762473e-01 2.09288701e-02 ... 2.10202625e-03
6.65474093e-01 6.36319903e-01]
[ 9.97562556e-01 3.33489046e-03 6.60523466e-02 ... 6.56220381e-03
-1.07577112e-02 -1.07577112e-02]]
shape (832, 7)
normalized tracking data
[[ 2.37484336e-01 6.72201854e-02 1.79624884e-03 ... 1.26496397e-04
8.06945816e-01 5.36572417e-01]
[ 5.23191345e-01 1.45525783e-01 0.00000000e 00 ... 0.00000000e 00
5.63912408e-01 6.22170278e-01]
[ 2.46464025e-01 2.66599975e-02 3.22175196e-04 ... 8.05437991e-05
3.36028730e-01 9.08641445e-01]
...
[ 4.92441881e-01 7.33912651e-03 2.67000124e-02 ... 2.70151896e-03
6.38594057e-01 5.90552045e-01]
[ 4.38248969e-01 6.56688483e-02 1.62183495e-02 ... 1.63509245e-03
6.60179626e-01 6.06221575e-01]
[ 9.97770139e-01 1.13661959e-02 6.40144152e-02 ... 6.45599926e-03
-9.09295670e-03 -9.09295670e-03]]
Комментарии:
1. какая строка генерирует ошибку?
2. model.fit @Andrey
Ответ №1:
Я думаю, у вас есть список массивов в качестве входных данных. Преобразуйте его в массив:
train_x = np.array(train_x)
train_y = np.array(train_y)