• 0

ظهور الخطأ UnboundLocalError : local variable 'logs' referenced before assignment  في كيراس

قمت ببناء النموذج البسيط التالي، لكن بظهر لي الخطأ التالي:

float validation_split = 2f;
Sequential model = new Sequential();
no_noise = no_noise.astype(np.float32);
with_noise = with_noise.astype(np.float32);
no_noise /= 255;
with_noise /= 255;
# بناء النموذج
model.Add(new Conv2D(128, kernel_size: new Tuple<int, int>(5, 5), activation: "tanh",  input_shape: new Shape(45, 45,1)));
model.Add(new Conv2D(64, kernel_size: new Tuple<int, int>(3, 3), activation: "tanh"));
model.Add(new Conv2DTranspose(64, kernel_size : new Tuple<int,int> (3, 3), kernel_constraint : max_norm, activation: "tanh"));
model.Add(new Conv2DTranspose(32, kernel_size : new Tuple<int,int> (3, 3), activation: "relu"));
model.Add(new Conv2D(1, kernel_size : new Tuple<int,int>(3, 3), activation: "sigmoid", padding: "same"));
model.Compile(optimizer: "rmsprop", loss: "binary_crossentropy");
model.Fit(with_noise, no_noise,epochs: 10,batch_size: 140,steps_per_epoch:2,validation_split: validation_split);
-------------------------------------------------------------------------------------------------------------------------
UnboundLocalError : local variable 'logs' referenced before assignment

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

عادة ماينتج هذا الخطأ عندما يكون حجم البيانات قليل، وبالتالي ينشأ هذا الخطأ بسبب حجم ال batch_size الذي اخترته حيث لايجب أن يكون حجمه أقل من حجم بيانات التدريب لديك، حيث أنه في معظم الحالات ، يكون سبب هذا الخطأ  هو أن حجم بيانات التدريب أقل من حجم الدُفعة، لذا تأكد أولاً من أن with_noise يحتوي على 140 عينة على الأقل أو قم بتقليل حجم الدفعة (batch_size ). أي مثلاً اجعل حجمه 64 أو 32 أو اجعله Batch GD أي 1.

float validation_split = 2f;
Sequential model = new Sequential();
no_noise = no_noise.astype(np.float32);
with_noise = with_noise.astype(np.float32);
no_noise /= 255;
with_noise /= 255;
# بناء النموذج
model.Add(new Conv2D(128, kernel_size: new Tuple<int, int>(5, 5), activation: "tanh",  input_shape: new Shape(45, 45,1)));
model.Add(new Conv2D(64, kernel_size: new Tuple<int, int>(3, 3), activation: "tanh"));
model.Add(new Conv2DTranspose(64, kernel_size : new Tuple<int,int> (3, 3), kernel_constraint : max_norm, activation: "tanh"));
model.Add(new Conv2DTranspose(32, kernel_size : new Tuple<int,int> (3, 3), activation: "relu"));
model.Add(new Conv2D(1, kernel_size : new Tuple<int,int>(3, 3), activation: "sigmoid", padding: "same"));
model.Compile(optimizer: "rmsprop", loss: "binary_crossentropy");
model.Fit(with_noise, no_noise,epochs: 10,batch_size: 64,steps_per_epoch:2,validation_split: validation_split);

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 1

تستخدم ال batch_size من أجل  تحديد كمية الداتا التي ستدخل الي الموديل في كل مرة يقوم فيها الموديل بالتدريب. بمعني أنه يقوم بتقسيم الداتا كلها إلى كميات متساوية من البيانات بحيث تدخل تباعا الي الموديل. فمثلا لو أن الداتا تحتوي على 100 صف من البيانات، فيقوم تقسيمها الي 10 أقسام كل واحدة تحتوي على 10 صفوف من البيانات.

لكن ماذا يحدث إذا قمنا بتقسيم البيانات بأكثر مما تحتويه الداتا كلها، بمعني أن نحاول تقسيم 5 صفووف الي 10 اقسام؟، حيناها ستظهر رسالة الخطأ التي ظهرت لك والتي تعني أن حجم ال  batch_size أكبر  من الحجم الكلي للبيانات.

ولعلاج تلك المشكلة ما عليك سوى تقليل حجم ال  batch_size حتي يستطيع الموديل أن يقسم البيانات كالتالي:

model.Fit(with_noise, no_noise,epochs: 10,batch_size: 32,steps_per_epoch:2,validation_split: validation_split);

هنا قمنا بتصغير حجم ال batch_size من 140 في الموديل الخاص بك الى 32، جرب هذا وستختفي رسالة الخطأ

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن