입력 데이터는 10 개의 샘플로 구성되며 각각의 시간 간격은 200 단계이며 각 시간 단계는 30 차원 벡터로 설명됩니다. 또한 각 시간 단계는 특정 시간 단계에서 수행 된 동작을 설명하는 3 차원 벡터 (하나의 핫 인코딩)로 구성됩니다. 그렇게 말하면서, 나는 이전의 모든 행동을 먹이로 한 다음, 어떤 행동이 다음에 취하는 것이 가장 좋은지를 예측하는 모델을 만들려고 노력하고 있습니다.Tensorflow LSTM : 일련의 이전 작업을 기반으로 다음 작업 예측
나는 tflearn과 tensorflow로는이 작업을 시도했지만 지금까지는 제한적인 성공을 거두었습니다.
간단한 샘플 코드 :
import numpy as np
import operator
import tflearn
from tflearn import regression
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.embedding_ops import embedding
from tflearn.layers.recurrent import bidirectional_rnn, BasicLSTMCell
from tflearn.data_utils import to_categorical, pad_sequences
SAMPLES = 10
TIME_STEPS = 200
DATA_DIMENSIONS = 30
LABEL_CLASSES = 3
x = []
y = []
# Generate fake data.
for i in range(SAMPLES):
sequences = []
outputs = []
for i in range(TIME_STEPS):
d = []
for i in range(DATA_DIMENSIONS):
d.append(1)
sequences.append(d)
outputs.append([0,0,1])
x.append(sequences)
y.append(outputs)
print("X1:", len(x), ", X2:", len(x[0]), ", X3:", len(x[0][0]))
print("Y1:", len(y), ", Y2:", len(y[0]), ", Y3:", len(y[0][0]))
# Define model
net = tflearn.input_data([None, TIME_STEPS, DATA_DIMENSIONS], name='input')
net = tflearn.lstm(net, 128, dropout=0.8, return_seq=True)
net = tflearn.fully_connected(net, LABEL_CLASSES, activation='softmax')
net = tflearn.regression(net, optimizer='adam', loss='categorical_crossentropy', name='targets')
model = tflearn.DNN(net)
# Fit model.
model.fit({'input': x}, {'targets': y},
n_epoch=1,
snapshot_step=1000,
show_metric=True, run_id='test', batch_size=32)
오류가
ValueError: Cannot feed value of shape (10, 200, 3) for Tensor 'targets/Y:0', which has shape '(?, 3)'
지금까지 내가 이해하는 한, input_data이 정확해야한다. 그러나 출력 데이터는 분명히 잘못되었습니다. 최소한 Tensorflow는 오류를 발생시킵니다. 그것은 아마도 내 모델이 시간 단계 당 하나의 레이블보다는 샘플 당 하나의 레이블을 기대하기 때문일 것입니다.
LSTM으로 목표를 달성 할 수 있습니까? 그렇다면 내 모델을 어떻게 설정해야합니까? 오류에서 알 수 있듯이
감사합니다, 로버트
3 차원 동작 벡터에는 어떤 종류의 데이터가 들어 있습니까? 범주 형 또는 연속 형? – Anis
@ 3 차원 작업 벡터가 하나의 핫 인코딩에 있음 : [1,0,0] = 동작 1, [0,1,0] = 동작 2, [0,0,1] = 동작 3. 나는 정의한다.나는 tflearn이 장면 뒤에서 많은 일을한다고 생각합니다. –