TF Keras: ValueError: Input 0 dari lapisan berurutan tidak kompatibel dengan lapisan: diharapkan ndim=3, ditemukan ndim=2

Jadi saya punya rangkaian Vektor 2D yang membentuk pola. Saya ingin memprediksi bagaimana rangkaian ini berlanjut. Saya memiliki array start_xy yang terdiri dari array dengan urutan, start_x dan start_y: mis. [1, 2.4, 3.8] dan hal yang sama untuk end_xy.

Saya ingin melatih model model prediksi urutan:

import numpy as np
import pickle
import keras
from keras.models import Sequential
from keras.layers import LSTM, Dense
from keras.callbacks import ModelCheckpoint
import training_data_generator
tdg = training_data_generator.training_data_generator(500)
trainingdata = tdg.produceTrainingSequences()
print("Printing DATA!:")
start_xy =[]
end_xy =[]

for batch in trainingdata:
    for pattern in batch:
        order = 1
        for sequence in pattern:
            start = [order,sequence[0],sequence[1]] 
            start_xy.append(start)
            end = [order,sequence[2],sequence[3]]
            end_xy.append(end)
            order = order +1

    
    model = Sequential()
    model.add(LSTM(64, return_sequences=False, input_shape=(2,len(start_xy))))
    model.add(Dense(2, activation='relu'))
    model.compile(loss='mse', optimizer='adam')
    model.fit(start_xy,end_xy,batch_size=len(start_xy), epochs=5000,  verbose=2)

Tapi saya mendapatkan pesan kesalahan:

 ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=3, found ndim=2. Full shape received: [320, 3]

Saya kira saya harus mengubah masukan saya, tetapi saya belum mengerti caranya. Bagaimana cara membuat ini berhasil? Apakah saya melakukan ini dengan cara yang benar?


person Sandra Peters    schedule 14.08.2020    source sumber
comment
Bisakah Anda memposting kode lengkap dengan kumpulan data di google colab atau github untuk saya debug. Saya ingin melihat seperti apa bentuk data yang Anda masukan dan apa tujuan akhir Anda.   -  person pratsbhatt    schedule 15.08.2020
comment
Saya telah memasukkan kode saya ke github.com/mylittlemachinelearning/sequenceprediction   -  person Sandra Peters    schedule 15.08.2020


Jawaban (1)


Anda sebagian besar hanya perlu mengonversi data Anda menjadi array numpy dan melakukan beberapa pembentukan ulang data tersebut sehingga model dapat menerimanya.

Pertama-tama konversikan start_xy menjadi array numpy dan bentuk ulang menjadi 3 redup:

start_xy = np.array(start_xy)
start_xy = start_xy.reshape(*start_xy.shape, 1)

Selanjutnya perbaiki bentuk input untuk layer LSTM menjadi [3, 1]:

model.add(LSTM(64, return_sequences=False, input_shape=start_xy.shape[1:]))

Let me know if the error persists or if another one comes up!
person Leon Shams    schedule 15.08.2020
comment
Itu menyelesaikan masalah awal saya, jadi ini pasti solusi untuk ini :-) di sisi lain yang saya dapatkan sekarang Gagal menemukan adaptor data yang dapat menangani input: ‹class 'numpy.ndarray'›, (‹class 'list'› berisi nilai tipe {'(‹class \'list\'› berisi nilai tipe {‹class \'int\'›, ‹class \'numpy.float64\'›})'}) tetapi itu pertanyaan yang berbeda - person Sandra Peters; 15.08.2020