複数の機能を備えたRNN


27

私は、機械学習アルゴリズム(基本的なランダムフォレストおよび線形回帰タイプのもの)で動作する知識を少し自習しています。私は分岐して、KerasでRNNの学習を開始することにしました。通常在庫予測を含むほとんどの例を見ると、1列が機能日付でもう1列が出力である以外に、実装されている複数の機能の基本的な例を見つけることができませんでした。私が行方不明になっている重要な基本的なものまたは何かがありますか

誰かが例を持っているなら、私はそれを大いに感謝します。

ありがとう!


1
「複数の機能」の意味がわかりません。学習に影響を与える複数の機能を意味する場合は、多変量設計マトリックスを使用するだけです。Plsは例または何かによって明確にします。
horaceT

@horaceT multiple features ここでは、数値データと非数値データを含む機能を使用して、時系列予測にRNNを使用する方法に関するより具体的な質問について詳しく説明しました。
hhh

回答:


25

リカレントニューラルネットワーク(RNN)は、シーケンスデータを学習するように設計されています。ご想像のとおり、彼らは間違いなく入力として複数の機能を取ることができます!KerasのRNN は、タイムステップTと特徴Fの 2D入力(TF)を取ります(ここではバッチディメンションを無視しています)。

ただし、中間のタイムステップt = 1、2 ...(T -1)が常に必要なわけではありません。したがって、Kerasは両方のモードを柔軟にサポートします。すべてのTタイムステップを出力させるreturn_sequences=Trueには、構築時にRNN(LSTMまたはなどGRU)に渡します。最後のタイムステップt = Tのみが必要な場合return_sequences=Falseは、使用します(return_sequencesコンストラクターに渡さない場合、これがデフォルトです)。

これらのモードの両方の例を以下に示します。

例1:シーケンスの学習

シーケンス全体を保持するLSTM(RNNのタイプ)をトレーニングする簡単な例を次に示します。この例では、各入力データポイントには2つのタイムステップがあり、それぞれに3つの特徴があります。出力データには2つのタイムステップ(return_sequences=True)があり、それぞれに4つのデータポイントがあります(これはに渡すサイズであるためLSTM)。

import keras.layers as L
import keras.models as M

import numpy

# The inputs to the model.
# We will create two data points, just for the example.
data_x = numpy.array([
    # Datapoint 1
    [
        # Input features at timestep 1
        [1, 2, 3],
        # Input features at timestep 2
        [4, 5, 6]
    ],
    # Datapoint 2
    [
        # Features at timestep 1
        [7, 8, 9],
        # Features at timestep 2
        [10, 11, 12]
    ]
])

# The desired model outputs.
# We will create two data points, just for the example.
data_y = numpy.array([
    # Datapoint 1
    [
        # Target features at timestep 1
        [101, 102, 103, 104],
        # Target features at timestep 2
        [105, 106, 107, 108]
    ],
    # Datapoint 2
    [
        # Target features at timestep 1
        [201, 202, 203, 204],
        # Target features at timestep 2
        [205, 206, 207, 208]
    ]
])

# Each input data point has 2 timesteps, each with 3 features.
# So the input shape (excluding batch_size) is (2, 3), which
# matches the shape of each data point in data_x above.
model_input = L.Input(shape=(2, 3))

# This RNN will return timesteps with 4 features each.
# Because return_sequences=True, it will output 2 timesteps, each
# with 4 features. So the output shape (excluding batch size) is
# (2, 4), which matches the shape of each data point in data_y above.
model_output = L.LSTM(4, return_sequences=True)(model_input)

# Create the model.
model = M.Model(input=model_input, output=model_output)

# You need to pick appropriate loss/optimizers for your problem.
# I'm just using these to make the example compile.
model.compile('sgd', 'mean_squared_error')

# Train
model.fit(data_x, data_y)

例2:最後のタイムステップの学習

一方、シーケンスの最後のタイムステップのみを出力するLSTMをトレーニングする場合は、設定する必要がありますreturn_sequences=False(またはFalseデフォルトであるため、コンストラクタから完全に削除します)。data_y最後のタイムステップのみを提供する必要があるため、出力データ(上記の例)を再配置する必要があります。したがって、この2番目の例では、各入力データポイントには2つのタイムステップがあり、それぞれに3つの特徴があります。ただし、出力データは、すべてのデータを単一のタイムステップにフラット化したため、各データポイントの単一のベクトルにすぎません。ただし、これらの各出力ベクトルには、まだ4つの機能があります(これは、私が渡すサイズだからですLSTM)。

import keras.layers as L
import keras.models as M

import numpy

# The inputs to the model.
# We will create two data points, just for the example.
data_x = numpy.array([
    # Datapoint 1
    [
        # Input features at timestep 1
        [1, 2, 3],
        # Input features at timestep 2
        [4, 5, 6]
    ],
    # Datapoint 2
    [
        # Features at timestep 1
        [7, 8, 9],
        # Features at timestep 2
        [10, 11, 12]
    ]
])

# The desired model outputs.
# We will create two data points, just for the example.
data_y = numpy.array([
    # Datapoint 1
    # Target features at timestep 2
    [105, 106, 107, 108],
    # Datapoint 2
    # Target features at timestep 2
    [205, 206, 207, 208]
])

# Each input data point has 2 timesteps, each with 3 features.
# So the input shape (excluding batch_size) is (2, 3), which
# matches the shape of each data point in data_x above.
model_input = L.Input(shape=(2, 3))

# This RNN will return timesteps with 4 features each.
# Because return_sequences=False, it will output 2 timesteps, each
# with 4 features. So the output shape (excluding batch size) is
# (2, 4), which matches the shape of each data point in data_y above.
model_output = L.LSTM(4, return_sequences=False)(model_input)

# Create the model.
model = M.Model(input=model_input, output=model_output)

# You need to pick appropriate loss/optimizers for your problem.
# I'm just using these to make the example compile.
model.compile('sgd', 'mean_squared_error')

# Train
model.fit(data_x, data_y)

すばらしい説明をありがとう。データポイント#1とデータポイント#2の関係は何ですか。たとえば、最初の状況で、データポイント2を削除してデータポイント1の下に配置する場合、4つのタイムステップがあります。それはモデル全体に​​どのような影響を与えますか?
Rjay155

データポイント間に特別な関係はありません。優れた深層学習トレーニングセットには、数万または数百万ものデータポイントがあります。1つのデータポイント= 1つのトレーニングサンプル、それだけです。データポイント#1と#2を「マージ」する場合、data_x単純に1つのデータポイントが含まれ、そのデータポイントには4つのタイムステップがあり、それぞれ3次元です(同様data_yに、同じ方法でマージする必要があります)。使用するタイムステップの数は、モデル化しようとしているもの(およびそのプロセスに関連するタイムステップの数)に依存します。
アダムSypniewski

@Adam Sypniewski私はyについて質問があります。data_y = numpy.array([#データポイント1#タイムステップ2の対象フィーチャ[[105、106、107、108]、[0、1]]、#データポイント2#タイムステップ2の対象フィーチャ[[205、206、207 、208]、[1、0]]])私のyの1つがカテゴリフィーチャである場合。これをどのように構成しますか。THX!
華イエ

2
その場合、おそらく各出力タイムステップがワンホットカテゴリにマッピングされるように、RNNの出力を密なレイヤーにフィードする必要があります。
アダムシプニエフスキ

ここで結果をどのように視覚化できますか?いくつかのプロットが役立ちます。
hhh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.