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

السؤال

نشر

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

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

 

Recommended Posts

  • 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
نشر

تستخدم ال 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، جرب هذا وستختفي رسالة الخطأ

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...