73645


以下のようなデータと正解データがあり、これをLSTMで学習したいのですが3次元と1次元を計算しようとしてもエラーが発生してしまいます。  
どうしたらよいのでしょうか？

**対象のデータ:**

[code]

    # 3次元
    data = [[[0.4, 0.1, 0.2],[0.2, 0.1,0.4]], [[0.4, 0.1, 0.2],[0.2, 0.1,0.4]]]
    # 1次元
    answer = [1.0, 2.0]
    
    # [[0.4, 0.1, 0.2],[0.2, 0.1,0.4]]を入力すると1.0が返ってくるようにしたい
    
[/code]

**エラー内容:**

[code]

    File "c:/Users/zunda/Desktop/Chainer_Realtime_Multi-Person_Pose_Estimation/test.py", line 92, in <module>
        model.fit(x_train, y_train, epochs=1000, verbose=0)
    
        ValueError: Input 0 is incompatible with layer sequential: expected shape=(None, None, 2), found shape=[None, 2, 3]
    
[/code]

**ソースコード:**

[code]

    x_train = np.array(data)
    y_train = np.array(answer)
    
    x_train = x_train.reshape((x_train.shape[0], x_train.shape[1], x_train.shape[2]))
    y_train = y_train.reshape((y_train.shape[0]))
    
    model = keras.models.Sequential()
    model.add(LSTM(100, activation='relu', input_shape=(3, 2)))
    model.add(RepeatVector(1))
    model.add(LSTM(100, activation='relu', return_sequences=True))
    model.add(TimeDistributed(Dense(1)))
    
    model.compile(optimizer='adam', loss='mse')
    
    model.fit(x_train, y_train, epochs=1000, verbose=0)
    
[/code]


CC BY-SA 4.0
2021-01-28T09:20:22.510
73643
2021-01-28T11:46:37.633
2021-01-28T11:46:37.633
3060
40856
question
python
3次元のLSTMのやりかたがわからない


最初のレイヤーの入力次元が `(3,2)` ですが、実際には `(2,3)` の入力を渡しています。

[code]

    import numpy as np
    from tensorflow import keras
    from tensorflow.keras.layers import *
    
    # 3次元
    data = [[[0.4, 0.1, 0.2], [0.2, 0.1, 0.4]], [[0.4, 0.1, 0.2], [0.2, 0.1, 0.4]]]
    # 1次元
    answer = [1.0, 2.0]
    
    x_train = np.array(data)
    y_train = np.array(answer)
    
    print(x_train.shape)  # (2, 2, 3): サンプル数2, 次元 (2, 3)
    
    x_train = x_train.reshape(
        (x_train.shape[0], x_train.shape[1], x_train.shape[2]))
    y_train = y_train.reshape((y_train.shape[0]))
    
    model = keras.models.Sequential()
    model.add(LSTM(100, activation='relu', input_shape=(2, 3)))  # 合わせる
    model.add(RepeatVector(1))
    model.add(LSTM(100, activation='relu', return_sequences=True))
    model.add(TimeDistributed(Dense(1)))
    
    model.compile(optimizer='adam', loss='mse')
    
    model.fit(x_train, y_train, epochs=1000, verbose=0)
    
[/code]

これでとりあえずエラーは出なくなるはずです。


CC BY-SA 4.0
2021-01-28T09:54:10.613
73645
2021-01-28T09:54:10.613
20885
73643
answer