私の入力データは10サンプルで構成され、各サンプルは200タイムステップを持ち、各タイムステップは30ディメンションのベクトルで表されます。 さらに、各タイムステップは、その特定のタイムステップで実行されたアクションを記述する3次元ベクトル(1つのホットエンコーディング)から成ります。それが言われて、私は以前のすべてのアクションをフィードし、次に取るのが最善のアクションを予測するモデルを構築しようとしています。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はエラーを投げます。これはおそらく、私のモデルでは、1つのタイムステップにつき1つのラベルではなく、1つのサンプルあたり1つのラベルが必要なためです。
私はLSTMで目標を達成することすらできますか?もしそうなら、私は自分のモデルをどのように設定する必要がありますか?エラーが示すように
おかげで、 ロバート
3次元行動ベクトルにはどのような種類のデータが含まれていますか?カテゴリまたは連続? – Anis
@Anis 3次元アクションベクトルは、[1,0,0] =アクション1、[0,1,0] =アクション2、[0,0,1] =アクション3の3つのホットエンコーディングにあります。私は定義する。私はtflearnがたくさんの場面の後ろにいると思う。 –