Meezo ML نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 أقوم ببناء نموذج في كيراس لكن تظهر لي المشكلة التالية عندما أحاول تدريب النموذج: x = Input(shape=[1]) e1 = Embedding(max_machine, 100)(x) in1 = Input(shape=[1]) e2 = Embedding(max_windspeed, 100)(in) in2 = Input(shape=[1]) e3 = Embedding(max_activepower, 100)(in2) in4 = Input(shape=[1]) emb_pitchangle = Embedding(max_pitchangle, 100)(in4) in_genspeed = Input(shape=[1]) emb_genspeed = Embedding(max_genspeed, 100)(in_genspeed) in_temp = Input(shape=[1]) emb_temp = Embedding(max_temp, 100)(in_temp) in_turbine = Input(shape=[1]) emb_turbine = Embedding(max_turbine, 100)(in_turbine) d = concatenate([ (e1), (in), (e3), (emb_pitchangle), (emb_genspeed), (emb_temp), (emb_turbine) ]) s_dout = SpatialDropout1D(0.3)(d) x = Flatten()(s_dout) x = Dropout(0.3)(Dense(1000,activation='tanh')(x)) x = Dropout(0.3)(Dense(128,activation='tanh')(x)) outp = Dense(1,activation='sigmoid')(x) model = Model(inputs=[in_machine, in1, in2, in_pitchangle, in_genspeed, in_temp, in_turbine], outputs=outp) ------------------------------------------------------------------------------------ InvalidArgumentError: indices[19577,0] = -3 is not in [0, 2160) [[Node: embedding_50/GatherV2 = GatherV2[Taxis=DT_INT32, Tindices=DT_INT32, Tparams=DT_FLOAT, _class=["loc:@training_3/Adam/gradients/embedding_50/GatherV2_grad/Reshape"], _device="/job:localhost/replica:0/task:0/device:CPU:0"](embedding_50/embeddings/read, embedding_50/Cast, embedding_48/GatherV2/axis)]] ما المشكلة؟ علماً أن مدخلاتي تحوي قيماً سلبية. اقتباس
1 Ali Haidar Ahmad نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 استخدامك للتضمين هنا غير صحيح ، فعندما تكون مدخلاتك لها قيم سلبية، يكون الترميز غير صالح لاستخدام مع طبقة التضمين، يحب أن يكون ترميز الكلمات في المستندات عبارة عن أعداد صحيحة موجبة حصراً (كل كلمة فريدة يتم ربطها بعدد صحيح يمثلها). حيث أن طبقة التضمين هي طبقة تتيح لنا تحويل كل كلمة إلى متجه بطول ثابت وبحجم محدد. المتجه الناتج هو متجه كثيف "Dense" له قيم حقيقية بدلاً من 0 و 1 فقط كما في الترميز One-Hot. يساعدنا الطول الثابت لمتجهات الكلمات على تمثيل الكلمات بطريقة أفضل وأكثر فعالية مع أبعاد مخفضة. وهذه المتجهات تكون ممثلة في فضاء Vector space مهيكل ويعكس المعاني الدلالية لكل كلمة. ويمكن اعتبارها كقاموس يقوم بربط أعداد صحيحة (كل كلمة ترمز في البداية كعدد صحيح) بمتجه كثيف. أي أنها تأخذ كدخل أعداد صحيحة ثم تبحث في هذا القاموس على المتجه الذي يقابله في القاموس الداخلي، ويعيد هذا القاموس. Word index --> Embedding layer --> Corresponding word vector إذا كون مدخلاتك تحوي أعداداً سلبية يعني أن استخدام التضمين غير صحيح هنا. إن التضمين يعمل مع أي نوع من مدخلات الأعداد الصحيحة الموجبة، ولكن ليس مع المدخلات العامة. 1 اقتباس
1 Ahmed Sharshar نشر 2 أغسطس 2021 أرسل تقرير نشر 2 أغسطس 2021 بشكل عام، لا تقبل النماذج التدريب على قيم سالبة، لان الترميز يجب أن يبدأ من 0 وحتي ما لا نهاية، وذلك لان له أساس في الرياضيات، حيث يتم تحويل كل تلك القيم في النهاية الي متجهات بحيث ترتبط كل قيمة بترميز معين، وبما انه لا يوجد معني لمتجهات سالبة القيمة، اذا لا يمكن أن تتضمن الترميزات قيما سالبة. أما في طبقة ال dense حيث يتم تحويل كل المصفوفات الناتجة الى متجاهات احادية البعد 1-D فتكون قيم الترميزات بين 0 و 1 فقط. يمكنك تخيلها مثل قاموس بحيث تنتمي كل قيمة فيه الي فئة محددة. ولان الترميز عندك قد ظهر فيه قيم سالبة، فهذا يعني أن استخدامك للتضمين غير صحيح، ولتجنب هذة المشكلة عليك استخدام one-hot encoder لجعل كل القيم أرقاما صحيحية. كذلك يمكنك تعديل شكل البيانات المخدلة عن طريق np.reshape وهذا لتجعلها موحدة في كل خطوات التدريب، قد يلغي هذا تلك المشكلة ايضا. اقتباس
السؤال
Meezo ML
أقوم ببناء نموذج في كيراس لكن تظهر لي المشكلة التالية عندما أحاول تدريب النموذج:
ما المشكلة؟ علماً أن مدخلاتي تحوي قيماً سلبية.
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.