اذهب إلى المحتوى

السؤال

نشر (معدل)

قمت ببناء النموذج التالي لكن لا أفهم سبب المشكلة:

# نموذج لتوقع أسعار الأسهم
#  استخدم بيانات 50 يوماً للتنبؤ بسعر إغلاق اليوم 51
import keras
from keras.layers import Dense,LSTM
import keras
model = keras.Sequential()
model.add( LSTM( 1024, input_shape=(50, 2), return_sequences=True))
model.add( LSTM( 200, return_sequences=True))
model.add( (Dense(1,activation=None)))
model.compile(optimizer='rmsprop',loss='mae')
model.fit( X, y, batch_size = 64,epochs=15)
-------------------------------------------------------------------
ValueError: Error when checking target: expected dense_1 to have 3 dimensions, but got array with shape (200, 1)

بياناتي لها الشكل التالي:

X_train:(200, 50, 2)
y_train:(200, 1)

 

تم التعديل في بواسطة Meezo ML

Recommended Posts

  • 1
نشر (معدل)

إن طبقة ال LSTM الثانية الخاصة بك تقوم بإعادة كامل التسلسل أي خرجها 3D وذلك بسبب ضبط الوسيط return_sequences=True على True والطبقات الكثيفة Dense بشكل افتراضي تقوم بتطبيق kernel على كل خطوة زمنية أيضاً مما ينتج عنه تسلسل:

# (batchsize, 50, 2)
model.add( LSTM( 1024, input_shape=(50, 2), return_sequences=True))
# (batchsize, 50, 1024)
model.add( LSTM( 200, return_sequences=True))
# (batchsize, 50, 200)
model.add( (Dense(1)))
# (batchsize, 50, 1) وهو الخرج الخاص بك

لذا لحل المشكلة يجب عليك أن تقوم بالضبط التالي return_sequences=False في طبقة LSTM الثانية:

import keras
from keras.layers import Dense,LSTM
import keras
model = keras.Sequential()
model.add( LSTM( 1024, input_shape=(50, 2), return_sequences=True))
model.add( LSTM( 200, return_sequences=False))
#(batchsize, 200)
model.add( (Dense(1,activation=None)))
#(batchsize, 1)
model.compile(optimizer='rmsprop',loss='mae')
model.fit( X, y, batch_size = 64,epochs=15)

 

تم التعديل في بواسطة Ali Haidar Ahmad
  • 1
نشر

المشكلة هي في ضبط شبكة lstm لأنها في هذه الحالة ستخرج كل سلسلة الحالات المخفية hidden states و في شكل البيانات و قبل إستدعاء طبقة dense نريد فقط خرج اخر خطوة زمنية final time step of the hidden state.

يمكن تفادي الخطأ بضبط return_sequence=False أو يمكنك مسحها لأن حسب تعريف شبكة lstm قيمتها false:

tf.keras.layers.LSTM(
    units,
    activation="tanh",
    recurrent_activation="sigmoid",
    use_bias=True,
    kernel_initializer="glorot_uniform",
    recurrent_initializer="orthogonal",
    bias_initializer="zeros",
    unit_forget_bias=True,
    kernel_regularizer=None,
    recurrent_regularizer=None,
    bias_regularizer=None,
    activity_regularizer=None,
    kernel_constraint=None,
    recurrent_constraint=None,
    bias_constraint=None,
    dropout=0.0,
    recurrent_dropout=0.0,
    return_sequences=False,
    return_state=False,
    go_backwards=False,
    stateful=False,
    time_major=False,
    unroll=False,
    **kwargs
)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...