-
المساهمات
1068 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
43
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Ali Haidar Ahmad
-
يمكنك أيضاً وضع الكود التالي في __init__.py وسيستورد جميع فئات الاختبار في الحزمة والحزم الفرعية. وسيسمح لك هذا بإجراء اختبارات محددة دون استيراد كل ملف يدويا: import pkgutil import unittest for loader, module_name, is_pkg in pkgutil.walk_packages(__path__): module = loader.find_module(module_name).load_module(module_name) for name in dir(module): obj = getattr(module, name) if isinstance(obj, type) and issubclass(obj, unittest.case.TestCase): exec ('%s = obj' % obj.__name__) وبشكل مشابه، بالنسبة لمجموعة الاختبار الخاصة بك، يمكنك ببساطة استخدام:. def suite(): return unittest.TestLoader().discover("appname.tests", pattern="*.py")
- 2 اجابة
-
- 1
-
تجدر الإشارة أيضاً إلى أنه لم تكن هناك أخطاء في طلبات AJAX POST في Django 1.2.4 وماقبلها (لم تكن AJAX محمية بأي شكل من الأشكال، لكنها كانت تعمل بشكل جيد). لحل المشكلة استخدام معالج ajaxSetup بدلاً من معالج ajaxSend: $.ajaxSetup({ beforeSend: function(xhr, settings) { function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // هل تبدأ سلسلة ملفات تعريف الارتباط هذه بالاسم الذي نريده؟ if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { //ذات الصلة، أي محليًا URL فقط إلى عناوين Token أرسل ال xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } } }); قم باستخدام هذا الكود كما هو وستكون قادر على النشر بدون خطأ 403.
- 2 اجابة
-
- 1
-
هذا الخطأ يظهر أحياناً بسبب وجود مشاكل في نسخة Pillow 8.3.0 الجديدة (صحيح أنك لاتستخدم import PIL بشكل صريح لكن الدالة ()tf.keras.preprocessing.image.load_img تستخدم PIL ضمنياً). لذا قم بتخفيض نسخة PIL إلى 8.2.0 وسينجح الأمر: !pip install pillow==8.2.0 وبشكل عام لمعرفة الإصدار الحالي من PIL: import PIL print(PIL.__version__)
- 1 جواب
-
- 1
-
يمكنك بشكل اختياري توفير نموذج مخصص باسم "403.html" للتحكم في عرض أخطاء HTTP 403. أيضاً يجب أن تعلم أنه لا يمكن استخدام النموذج 403 إلا إذا قمت برفع PermissionDenied. يعرض الكود التالي نموذج عرض مستخدم لاختبار القوالب المخصصة "403.html" و "404.html" و "500.html": def index(request): h = """ <!DOCTYPE html> <html lang="en"> <body> <ul> <li><a href="/">home</a></li> <li><a href="?action=raise403">Raise Error 403</a></li> <li><a href="?action=raise404">Raise Error 404</a></li> <li><a href="?action=raise500">Raise Error 500</a></li> </ul> </body> </html> """ event = request.GET.get('action', '') from django.http import Http404 if event == 'raise404': raise Http404 from django.core.exceptions import PermissionDenied as PD if event == 'raise403': raise PD if event == 'raise500': raise Exception('Server error') return HttpResponse(h) أيضاً يجب تعيين DEBUG = False في settings المشروع أو سيعرض لك إطار العمل traceback بدلاً من ذلك لـ 404 و 500.
- 3 اجابة
-
- 1
-
tensorboard_callback هي أداة تسمح لك بمراقبة أداء النموذج من خلال رسم بياني يوضح حالة التدريب. ويمكنك استخدامها مع نموذجك أو أي نموذج آخر بنفس الطريقة كالتالي: %load_ext tensorboard # tensorboard نقوم بتحميل الإضافة # الآن سنعرف نموذج import tensorflow as tf import datetime mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train / 255.0, x_test / 255.0 def create_model(): return tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28)), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) model = create_model() # ترجمة النموذج model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # مسار المجلد الذي سيتم فيه حفظ المعلومات التي سيقوم التنسربورد بتحليلها وعرضها log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S") # تعريف الكولباكس tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir) # نقوم بتمرير الكولباكس إلى دالة التدريب model.fit(x=x_train, y=y_train, epochs=2, validation_data=(x_test, y_test), callbacks=[tensorboard_callback]) الآن لعرض الرسم البياني نقوم بتنفيذ الأمر التالي ضمن ال nootebook: # لعرض الغراف %tensorboard --logdir logs/fit # حيث نضع مسار المجلد السابق أو من خلال ال commandline استخدم نفس الأمر السابق لكن من دون استخدام المعامل % أي: tensorboard --logdir logs/fit وبهذه الطريقة يمكنك عرض معلومات الدقة والتكلفة loss ضمن نموذجك خلال عملية تدريب نموذجك.
- 2 اجابة
-
- 1
-
Yacine TV هو تطبيق يعمل على الأجهزة التي تعمل بنظام أندرويد فقط، وكل التطبيقات التي تعمل بنظام آندرويد لايمكنها أن تعمل ضمن بيئات الأنظمة الأخرى (مثل ويندوز ولينوكس وماك..إلخ). لكن هناك طريقة لتشغيل أي تطبيق أندرويد على هذه الأنظمة وهي تثبيت محاكي (محاكي آندرويد). مثلاً إذا كان جهازك يعمل بنظام ويندوز يمكنك تثبيت المحاكي "BlueStacks". حيث أن بلوستاكس هو برنامج محاكٍ لنظام أندرويد، يسمح لمستخدمي نظام ويندوز أوماك بتشغيل تطبيقات الاندرويد على الحاسوب. https://www.bluestacks.com/download.html فقط قم بتنزيله ثم ثبت عليه أي تطبيق أندرويد ترغب بتشغيله. وهو سهل الاستخدام.
- 4 اجابة
-
- 1
-
في تنسرفلو يمكنك حسابهم بالشكل التالي اعتماداً على الصيغة العامة لهم: بعد حساب القيم المتوقعة y_pred نقوم بحساب ال TP و TN و FP و FN ونستخدم الدالة count_nonzero للقيام بذلك: TP = tf.count_nonzero(y_pred * y_true) TN = tf.count_nonzero((y_pred - 1) * (y_true - 1)) FP = tf.count_nonzero(y_pred * (y_true - 1)) FN = tf.count_nonzero((y_pred - 1) * y_true) ثم نقوم بتطبيق القوانين السابقة مباشرةً: precision = TP / (TP + FP) recall = TP / (TP + FN) f1 = 2 * precision * recall / (precision + recall) عموماً إذا لم تكن تستخدم graph فيمكنك أيضاً استخدام التوابع الجاهزة في sklearn لذا سأترك لك روابط لهم: في الرابط هنا تجد شرح لل TP و ال TN إلخ..
- 2 اجابة
-
- 1
-
كما ذكر سامح.. من أجل Django 1.7+ يجب عليك استخدام الخطاف. ولكن إذا كنت تريد أن يتم استدعاء دالتك فقط عند تشغيل الخادم (وليس عند إجراء migrations ، migrate ، shell ، إلخ.. ) ، وتريد تجنب استثناءات AppRegistryNotReady عليك القيام بما يلي: # الملف: myapp / apps.py import sys from django.apps import AppConfig class AppC(AppConfig): name = 'App' def ready(self): if 'runserver' not in sys.argv: return True # يجب عليك استيراد الوحدات الخاصة بك هنا # لتجنب استثناء AppRegistryNotReady from .models import MyModel # كود بدء التشغيل أيضاً يمكنك استخدام <project> /wsgi.py للقيام بذلك ، وسيتم تشغيله مرة واحدة فقط ، عند بدء تشغيل الخادم ، ولكن ليس عند تشغيل أوامر أو استيراد وحدة معينة: import os os.environ.setdefault("DJANGO_SETTINGS_MODULE", "{{ project_name }}.settings") # كود بدء التشغيل هنا .. .. from django.core.wsgi import get_wsgi_application application = get_wsgi_application()
- 3 اجابة
-
- 1
-
يمكنك القيام بعملية التحويل من خلال الكود التالي: import tensorflow as tf with tf.Session() as mysess: # تحميل الغراف saver = tf.train.import_meta_graph('model.ckpt-22480.meta') # meta نمرر مسار تواجد ملف # تحويل الأوزان saver.restore(mysess,tf.train.latest_checkpoint('path/of/your/.meta/file')) # تجميد الغراف output_nodes = ['output:0'] # نحدد أسماء عقد الإخراج frozen_graph_def = tf.graph_util.convert_variables_to_constants( mysess,mysess.graph_def, output_nodes) # حفظه with open('graph.pb', 'wb') as file: file.write(frozen_graph_def.SerializeToString()) وفي حال لم تكن تعرف أسماء عقد الخرج، يمكنك استخدام الكود التالي لاستخلاصها: output_nodes = [n.name for n in tf.get_default_graph().as_graph_def().node]
- 2 اجابة
-
- 1
-
نعم يمكن، لكنها فكرة سيئة وقد تؤدي بك إلى العديد من المشاكل. لكن إليك بعض الطرق: قتل النيسب "Thread" من خلال تعريف flag بحيث عند رفعه يتم إيقافه: في الكود التالي، سنعرف علم (flag) وبمجرد أن نقوم برفعه ينتهي تنفيذ الدالة run ويمكن قتل النيسبth1 باستخدام th1.join. import time import threading as th def myfunc (): while True: print('The thread is still working') # نجعل العلم متحول عام لكي تكون التغيرات عليه عامة أي مرئية global flag #يتم إيقاف النيسب True إذا تم رفع العلم أي إذا كان if flag: break # في البداية نجعل العلم غير مرفوع flag = False # نعرف أول نيسب # النيسب يقوم بتنفيذ الدالة السابقة th1 = th.Thread(target = myfunc ) # تشغيل النيسب th1.start() time.sleep(1) # هنا مثلاً نقوم برفع العلم ليتم إيقافه stop_threads = True th1.join() print('thread killed') الطريقة الثانية هي إثارة استثناء في النيسب، من خلال استخدام الدالة PyThreadState_SetAsyncExc: في الكود التالي بمجرد استدعاء الدالة myexception سيتم إنهاء الدالة myfunc لأنه عندما يظهر الاستثناء سينتقل التحكم في البرنامج خارج كتلة try ويتم إنهاء الدالة. بعد ذلك نقوم باستخدام join لقتل النيسب. وفي حالة لم نقوم باستدعاء دالة رفع الاستثناء سيتم تنفيذ myfunc بدون توقف ولن يتم استدعاء Join لقتل النيسب. import threading from ctypes.pythonapi import PyThreadState_SetAsyncExc import time import ctypes # نيسب مع استثناء class exception(threading.Thread): def __init__(self, name): threading.Thread.__init__(self) self.name = name # التابع الهدف def myfunc(self): try: while True: print('is running ' + self.name) finally: print('is over') # دالة لإرجاع رقم الثريد def ID_(self): if hasattr(self, '_thread_id'): return self._thread_id for id, thread in threading._active.items(): if thread is self: return id # دالة لرفع استثناء def myexception(self): id = self.ID_() e = PyThreadState_SetAsyncExc(id, ctypes.py_object(SystemExit)) if e > 1: PyThreadState_SetAsyncExc(id, 0) # طباعة رسالة تعبر عن أنه تمت إثارة الاستقناء print('failure') th = exception('thr') # نمرر اسم النيسب # تشغيله th.start() time.sleep(1) # استدعاء دالة رفع الاستثناء ليتم إيقافه th.myexception() th.join()
- 2 اجابة
-
- 1
-
أول طريقة من خلال استخدام النهج التكراري (الحلقات التكرارية): # باستخدام الحلقات التكرارية def cartesian_iterative(list): result = [[]] for l in list: result = [x+[y] for x in result for y in l] return result # الآن يمكننا استخدام التابع السابق لتنفيذ الجداء الديكارتي على القوائم sections = [ [1, 2, 3], [4, 5], [6, 7] ] cartesian_iterative(sections) من خلال استخدام lambda و reduce: # تعريف التابع def prod(pools): import functools from itertools import product return list(functools.reduce(lambda x,y: product(x,y) , pools)) # استخدامه prod(sections) أو من خلال العودية: # تعريف التابع def product(ar_list): if not ar_list: yield () else: for a in ar_list[0]: for prod in product(ar_list[1:]): yield (a,)+prod # لاستخدامه list(product(sections))
- 2 اجابة
-
- 1
-
يمكنك استخدام الكلاس LambdaCallback التي تسمح لك بتعريفَ callback خاص بك وبالطريقة التي تريدها. باني هذا الكلاس يأخذ الوسطاء التالية التي تسمح لك بالتحكم في توقيت تنفيذ ال callback: tf.keras.callbacks.LambdaCallback( on_epoch_begin=None, on_epoch_end=None, on_batch_begin=None, on_batch_end=None, on_train_begin=None, on_train_end=None, **kwargs ) on_epoch_begin أي الاستدعاء يتم في بداية كل epoch. و on_epoch_end أي في نهايته. on_batch_begin أي في بداية الباتش... وهكذا بالنسبة لللبقية. بالنسبة ل on_epoch_begin و on_epoch_end فهما يتوقعان منك أن تتستخدم معهما وسيطين موضعيين هما ال epoch, logs. بالنسبة ل on_batch_begin و on_batch_end يتوقعان وسيطين أيضاً هما batch, logs. وأخيراً on_train_begin و on_train_end يتوقعان فقط وسيط واحد وهو logs. الآن لجعل الأمور أوضح سنأخذ المثال التالي: # بناء نموذج # compile ترجمته من خلال الدالة # fit الآن عندما نريد تعريف الكولباك يجب أن يتم ذلك قبل تنفيذ الدالة # تعريف الكولباك الذي طلبته mycallback= LambdaCallback(on_epoch_end=lambda epoch, logs:model.save_weights(myfile.hdf5) if logs["val_accuracy"]>0.7 else None) #لكن لاتنسى أن تقوم بتمرير الكولباك الذي عرفناه للدالة أي fit الآن تقوم بتدريب النموذج من خلال الدالة model.fit(..., callbacks=[mycallback]) وبالتالي سيتم حفظ أوزان النموذج كلما كانت قيمة ال val_acc أكبر من 70 في المئة. مثال آخر حيث سنقوم بتعريف كولباك يقوم بطباعة رقم الحزمة في بداية كل باتش: callback1 = LambdaCallback( on_batch_begin=lambda batch,logs: print(batch)) تعريف كول باك آخر يقوم بحفظ ال loss في نهاية كل epoch في ملف JSON (الملف سيكون عبارة عن كائن json في كل سطر): import json json_log = open('loss_log.json', mode='wt', buffering=1) #json إنشاء ملف callback2 = LambdaCallback( on_epoch_end=lambda epoch, logs: json_log.write( json.dumps({'epoch': epoch, 'loss': logs['loss']}) + '\n'), on_train_end=lambda logs: json_log.close() ) الآن نقوم بتمريرهم للدالة fit عندما نريد بدأ التدريب: model.fit(..., callbacks=[callback1, callback2])
- 2 اجابة
-
- 1
-
بالنسبة لاقتراحك فلا اعتقد أنه خيار جيد وسيجعل أوزان نقل التعلم أقل فائدة، والسبب في ذلك يعود إلى جوهر فكرة ال CNN وهي تطبيق filterbank على الصور في كل طبقة بحيث في أول طبقة يتم استخلاص سمات الصورة ( مثل الحواف من خلال تطبيق مرشحات الدرجة الأولى (سوبل) أو الثانية (غاوص) ومرشحات كشف الزوايا مثل هاريس و كاني .. إلخ) ثم في الطبقة التالية يتم تطبيق filterbank مرة أخرى على ناتج المرحلة السابقة، وهكذا.. أي يتم استخراج سمات عالية المستوى كلما تعمقت، مشتقة من سمات المستوى الأدنى التي استخرجتها الطبقات السابقة. وبالتالي إذا قمت بإسقاط الطبقة الأولى سيتم تخريب هذا التسلسل. الحل يكون من خلال جعل صورك بتنسيق RGB حتى ولو أنها رمادية وسينجح ذلك تماماً، ويتم ذلك من خلال استخدام طريقة ما بحيث تقوم بنسخ القيم أي تكرار مصفوفة الصور 3 مرات على بُعد جديد. وهنا حل مقترح للقيام بذلك من خلال استخدام التابع np.newaxis من المكتبة نمباي: # أبعاد الصور الرمادية print(grayscale_batch.shape) # (40, 100, 100) rgb_batch = np.repeat(grayscale_batch[..., np.newaxis], 3, -1) # أبعاد الصور بعد تكرار المصفوفة print(rgb_batch.shape) # (40, 100, 100, 3) يمكنك أيضاً استخدام الوسيط color_mode في الدالة image_dataset_from_directory وذلك عن طريق ضبطها على "RGB" حيث سيقوم بتحويلها تلقائياً اعتماداً على الفكرة السابقة. ولمزيد من التفاصيل عنه وعن ال Imagegenerator فهذا الرابط يشرح كل شيء:
-
سأفترض أنك تعمل على معالج واحد.. هنا عندما نقسم أول مرة، فإننا نقسم البرنامج إلى جزئين، وبما أننا ننفذ البرنامج في معالج واحد بالتالي سوف يذهب التنفيذ إلى القسم اليساري ينتهي منه تماماً، ثم يعود ليرتب القسم اليميني. وهنا يمكننا الاستنتاج إنه في الوقت الذي يكون فيه المعالج يتولى أمر الجزء اليساري، يكون الجزء اليميني منتظر حتى ينتهي المعالج عمله مع الجزء اليساري وبالتالي هنا يمكننا الاستفادة من التفرعية ونقوم بتفريع القسمين الأوليين إلى ثريدين. لذا يكون: Thread th1=new thread (() =>{ Mergesort.Mergesort_Recursive(numbers1,0,len/2)}); Thread th2=new thread (() =>{ Mergesort.Mergesort_Recursive(numbers1,,(len/2 )+1,len-1)}); Th1.start();th2.start(); Th1.join();th2.join(); Thread th1=new thread (() =>{ Mergesort.Domerge(numbers1,0, (len/2)+1,len-1); عندما ندمج المصفوفتان يجب أن يكونا مرتبتين ولن يكونا مرتبتين حتى ينتهي التابع Mergesort_Recursive من عمله تماماً وحتى نضمن ذلك يجب وضع th1.join و th2.join من أجل عدم تنفيذ Domerge قبل أن ينتهي التابع Mergesort_Recursive وإلا فسوف تظهر اخطاء كثيرة ولن تترتب المصفوفة.
-
السؤال الذي يشغل بال أغلب السوريين.. هناك العديد من الشركات التي تؤمن لك طرق لسحب الأموال بسهولة. مايلي هو رابط لشركة تدعى ليرات يمكنك من خلالها تحويل الأموال إلى سوريا. الرابط الثاني لشركة الفؤاد للحوالات المالية وهي شركة سورية رسمية ويمكنك التحويل من خلاهم (يعتمدون على الويستريونيون): https://www.facebook.com/liratFast/ https://m.facebook.com/alfuad.mt/?locale2=ar_AR هناك أيضاً أشخاص يعملون كوسطاء وعمولتهم أقل. في حال تعاملت معهم تجنب استلام أي مبلغ مالي باليد. أي لاتستلم حوالتك من أشخاص (بسبب القوانين في البلاد) فقد تتعرض لمشاكل كبيرة في هذه الحالة. اجعل عملية استلامك من خلال مكتب حصراً.
-
هناك حل أفضل من استخدام image-webpack-loader وهو استخدام imagemin و imagemin-webp: تحقق من أنه تم تثبيت magemin & imagemin-webp. قم بإنشاء ملف webpack.config.prod.js لإنشاء سكريبت لتحويل الصور. قبل يناء سكريبت webpack. تكون المصفوفة ['src/images/*.{jpg,png}'] هي ال input ويكون ال destination هو الخرج: const imagemin = require( "imagemin" ) const webp = require( "imagemin-webp" ) imagemin( ['src/images/*.{jpg,png}'], { destination: 'src/images', plugins: [ webp( { quality: 60 } ) ] } ) يتم الإخراج من خلال src لتجنب تحميل الأشياء غير المستخدمة في مجلد dist والسماح لمكوِّن إضافي لـ ejs بطلب ملفات .webp مباشرة بواسطة أمر "require". وأخيراً قم بإنشاء prescript في package.json تكون مخصصة لل production. "scripts": { "preprod": "node webpack.config.prod.js", "prod": "npm webpack" }
-
أولاً لنشرح الرموز: N هو عدد الصور ضمن الحزمة (batch). H هو ارتفاع كل صورة. W: عرضها. C عدد القنوات اللونية للصورة. للتحويل من (N, H, W, C) NHWC ل (N, C, H, W) NCHW: يجب عليك التبديل بين الأبعاد وهنا سنستخدم الدالة tf.transpose مع استخدام الوسيطة perm للقيام بعملية التبديل: perm[0] = 0 أي أن البعد الأول من الخرج (البعد الأول للصورة الجديدة) سيكون نفسه في الصورة القديمة. perm[1] = 3 أي أن البعد الأول من الخرج سيكون نفسه البعد الرابع من الصورة القديمة. ونفس الأمر لبقية الأبعاد: perm[2] = 1 perm[3] = 2 الآن مثال لتوضيخ الفكرة حيث قمنا بتعريف حزمة من الصور ثم حولنا تنسيقها: import tensorflow as tf nhwc = tf.placeholder(tf.float32, [None, 50, 150, 3]) # حزمة الإدخال nchw = tf.transpose(nhwc, perm =[0, 3, 1, 2]) print(nchw.get_shape()) # the shape of out is [None, 3, 50, 150] الخرج الآن للتحويل العكسي أي من NCHW ل NHWC نستخدم نفس الفكرة السابقة. مثال: nchw = tf.placeholder(tf.float32, [None, 3, 50, 150]) nhwc = tf.transpose(images_nchw, [0, 2, 3, 1]) print(nhwc.get_shape()) # the shape of out is [None, 50, 150, 3]
-
الدالة evaluate تقوم بتوقع (predict) قيم على أساس دخل (input) يمرر لها وتقوم بحساب الدقة و التكلفة (loss) على أساس المعطيات (دالة التكلفة ومعيار الكفاءة metric) الممررة للدالة compile أي نقوم لتمريرالقيم الحقيقية والمتوقعة ويحسب لك الدقة والتكلفة. ولمزيد من التفاصيل يمكنك الانتقال إلى السؤال التالي: أما بالنسبة للدالة predict فهي تقوم فقط بتوقع القيم على أساس الدخل الممرر لها، وذلك مفيد بالطبع لأنك قد تحتاج هذا القيم، مثلاً تريد استخدام معيار آخر غير معرَف ضمن إطار العمل مثل F1-Score أو تريد التعبير عن النتائج كقيم احتمالية.. إلخ. مثال: from sklearn.datasets import make_blobs from sklearn.preprocessing import MinMaxScaler as mimx from keras.models import Sequential from keras.layers import Dense # توليد بيانات تصنيف ثنائية الأبعاد data, labels = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1) # تقييس البيانات s = mimx() s.fit(data) data = scalar.transform(data) # توليد بيانات أخرى للاختبار test, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1) test = s.transform(test) # تعريف النموذج model = Sequential() model.add(Dense(8, input_dim=2, activation='relu')) model.add(Dense(8, activation='relu')) model.add(Dense(4, activation='relu')) model.add(Dense(1, activation='sigmoid')) model.compile(loss='binary_crossentropy', optimizer='rmsprop') model.fit(data, labels, epochs=461) # prediction prdictedValues = model.predict_classes(test) # عرض القيم المتوقعة لعينات البيانات for i in range(len(Xnew)): print("X=%s, Predicted=%s" % (test[i], prdictedValues[i])) """ X=[0.87935790 0.1206421], Predicted=[0] X=[0.22155783 0.7724488], Predicted=[1] X=[0.70015480 0.96791697], Predicted=[0] """
-
إذا كنت تفضل عدم تحديد الحقل، على سبيل المثال لبعض الطرق الديناميكية، فيمكنك القيام بذلك كالتالي: def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.fields['email'].widget.attrs['placeholder'] = self.fields['email'].label or 'email@address.nl' حل آخر من خلال تخصيص ال widget الافتراضي. إذا كنت تستخدم نفس ال widget الذي يستخدمه الحقل عادةً، فيمكنك ببساطة تخصيص ذلك بدلاً من إنشاء مثيل جديد: class sf(forms.Form): q = forms.CharField(label='Search') def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['q'].widget.attrs.update({'placeholder': 'Search'})
- 3 اجابة
-
- 1
-
بدايةً كتوضيح بسيط.. هناك نوعان من كائنات الوقت والتاريخ: "الواعي aware" و "البسيط naive". يمتلك الكائن الواعي معرفة كافية بالعمليات الحسابية والتعديلات الدولية على الأوقات، كالمناطق الزمنية والتوقيت الصيفي، وتعديل القيمة الخاصّة به بصورة تتناسب مع الكائنات الواعية الأخرى. يستخدم الكائن الواعي لتمثيل فترة زمنية معيّنة غير مفتوحة للتفسير. أما الكائن البسيط فلا يمتلك المعلومات الكافية ليضع نفسه في المكان الصحيح نسبة إلى كائنات الوقت أو التاريخ الأخرى. تعتمد القيمة التي يمثّلها الكائن البسيط، سواء أكانت التوقيت العالمي المنسق (Coordinated Universal Time UTC) أو التوقيت المحلي، أو التوقيت في منطقة زمنية أخرى، تعتمد هذه القيمة بصورة تامة على البرنامج، وهو المسؤول الوحيد عن تمثيل رقم معيّن للأمتار أو الأميال أو الكتلة. بالنسبة لكائن datetime فهو من النوع البسيط. ولمزيد من التفاصيل يمكنك زيارة الرابط التالي: https://wiki.hsoub.com/Python/datetime#.D8.A7.D9.84.D8.B5.D9.86.D9.81_datetime.date أما بالنسبة للمشكلة فيجب عليك إضافة معلومات المنطقة الزمنية إلى datetime.now: # aware_variable معلومات المنطقة الزمنية لل timezone = your_timezone_aware_variable.tzinfo # التاريخ والوقت الحالي للمنطقة الزمنية للمتغير الخاص بك now_in_timezone = datetime.datetime.now(timezone) #يمكنك الآن إجراء مقارنة بينهما، فكل من متغيري التاريخ والوقت لهما نفس المنطقة الزمنية if your_timezone_aware_variable <= now_in_timezone: pass ويمكنك اختصار ماسبق بسطر واحد: if timezone_aware_var <= datetime.datetime.now(timezone_aware_var.tzinfo): pass
- 3 اجابة
-
- 1
-
عموماً لايوجد طريقة مباشرة للقيام بذلك لأن GradientDescentOptimizer يقبل معدل تعلم ثابت (غير متغير) لكن للقيام بذلك نستفيد من فكرة أن وسيطة ال learning_rate في باني ال GradientDescentOptimizer يمكن أن يكون موتر (Tensor)، وبالتالي يمكننا استخدام معدل تعلم مختلف في كل خطوة، على سبيل المثال: import tensorflow as tf lr = tf.placeholder(tf.float32, shape=[]) # ... # ... train_step = tf.train.GradientDescentOptimizer(name="myOptimizer" learning_rate=learning_rate).minimize(m) mysess = tf.Session() # تمرير قيم مختلفة لمعدل التعلم في كل خطوة تدريب mysess.run(train_step, feed_dict={lr: 0.1}) mysess.run(train_step, feed_dict={lr: 0.01}) mysess.run(train_step, feed_dict={lr: 0.001})
- 2 اجابة
-
- 1
-
eval تقوم بتقييم ال Tensorالذي قام باستدعائها (دالة نستدعيها من خلال الموتر أي: ()tensor.eval). وسيؤدي استدعاء هذه الطريقة إلى تنفيذ جميع العمليات السابقة التي تنتج المدخلات اللازمة للعملية التي تنتج هذا الموتر "التنسر". وطبعاً قبل استدعاء Tensor.eval، يجب أن يكون قد تم تشغيل البيان الخاص به في جلسة Session، ويجب أن تكون الجلسة الافتراضية متاحة ، أو يجب تحديد الجلسة بشكل صريح. Session.run تقوم أيضاً بتقييم التنسر (run هي دالة نمرر لها الموتر أي: (tensor)Session.run). نستنتج أنه عندما يكون لدينا موتر ما وليكن t فإن استدعاء t.eval يكافئ استدعاء tf.get_default_session().run(t) مثال: import tensorflow as tf t = tf.constant(5.0) mysess = tf.Session() with mysess.as_default(): assert sess is tf.get_default_session() assert t.eval() == mysess.run(t) # لن يعطي خطأ لأنهما متساويتان لكن Session.run نستطيع من خلالها الحصول على قيم أكثر من موتر دفعة واحدة، مثال: t1 = tf.constant(5.0) t2 = tf.constant(4.0) t3 = tf.constant(6.0) mul1 = tf.mul(t1, t2) mul2 = tf.mul(t1,t3 ) with sess.as_default(): # تقييم الموترين دفعة واحدة sess.run([mul1, mul2]) mul1.eval() # تقييم الموتر الأول mul2.eval() # الثاني
- 2 اجابة
-
- 1
-
هناك طريقتين لرسم عدة رسوم بيانية الأولى باستخدام مانسميه "superimposition" أي وضع كل الرسوم ضمن plot واحد أي نقوم بتركيبها: import math import matplotlib.pyplot as plt import numpy # إنشاء مصفوفة data = numpy.arange(0, math.pi*2, 0.03) # y تعيين قيم للمحور # التابع الأول func1 = numpy.sin(data) # التابع الثاني func2 = numpy.cos(data) # رسمهما plt.plot(data, func1, label='sin',color='r') plt.plot(data, func2, label='cos', color='b') # إعطاء اسم للمحول السيني plt.xlabel("Angle") # للمحور العيني plt.ylabel("Magnitude") # للرسم البياني plt.title("My graph") # ألعرض plt.show() # قم بتشغيل الكود وستظهر لك النتائج الطريقة الثانية استخدام الدالة subplot التي ذكرها الأستاذ أحمد. والطريقة الثالثة هي استخدام subplot2grid وهي مشابهة لحدما للدالة subplot لكنها تعطيك مرونة أكبر في التعامل مع المخططات: matplotlib.pyplot.subplot2grid(shape, loc, rowspan=1, colspan=1, fig=None, **kwargs) حيث أن الوسيط الأول هو عبارة عن أبعاد shape ال grid (الشبكة) التي سنضع ضمنها محاور الرسم البياني (الغراف). أما الوسيط الثاني فهو يحدد أين سيتم وضع كل غراف ضمن ال grid فمثلاً لو حددنا أن الشبكة أبعادها 3*3 هذا يعني أنه سيكون لدينا 9 أماكن لنضع الرسوم فيها وهم (0,0) (0,1) (0,2) (1,2) (1,1) (1,2) (2,0) (2,1) (2,0). وهذه الأبعاد مرنة للغاية أي يمكنك التلاعب بها كيفما شئت. الوسيط الثالث هو عدد الصفوف المحور التي نريدها أن تمتد إلى الأسفل. أما الوسيط الرابع عدد أعمدة المحور التي نريدها أن تمتد إلى اليمين. (يجب عليك التجريب لتفهم أكثر). مثال: import numpy as np import math import matplotlib.pyplot as plt # إنشاء قيم للمحور السيني x = np.arange(0, 10) plot1 = plt.subplot2grid((3, 3), (0, 0)) #3*3 أي سنضع الرسمة في السطر الأول من العمود الأول من الشبكة ذات الأبعاد plot1.plot(x, np.exp(x)) plot1.set_title('EXP') plot2 = plt.subplot2grid((3, 3), (0, 1)) plot2.plot(x, x**0.5) plot2.set_title('S_ROOT') plot3 = plt.subplot2grid((3, 3), (0, 2)) plot3.plot(x, x*x) plot3.set_title('SQU') # تجميعها وعرضها plt.tight_layout() plt.show() # سيكون الناتج هو 3 رسوم بيانية متجاورة على نفس السطر
-
إذا كنت ترغب في إضافة queryset إلى حقل many to many، فقم أولاً بتغييره إلى قائمة وأضفه كوسائط موضعية باستخدام *: #queryset يرجع p = Permission.objects.all() #many to many إضافة النتيجة إلى حقل g = MyGroup.objects.get(name='..') g.permissions.add(*p)
- 2 اجابة
-
- 1
-
يجب أن تقوم بتعريف الكولباكس والتقاطه وتمريره إلى الدالة fit، أي بمعنى آخر يجب أن تقوم بإنشاء كائن "Callback Tensorboard" ثم تمريره إلى الدالة fit: from keras.callbacks import TensorBoard Callback_Tensorboard_object=TensorBoard(log_dir='./Graph',write_graph=True, write_images=True) ... ... model.fit(...inputs and parameters..., callbacks=[Callback_Tensorboard_object]) وهكذا سيتم تشغيله مع عملية التدريب وسيعطيك الملفات التي يمكنك استخدامها مع ال Tensorboard. ولاستعراض هذه الملفات نقوم بفتح ال terminal و تنفيذ الأمر التالي: علماً أن log_dir هو المكان الذي يتم فيه حفظ ملفاتك التي ستم تحليلها من قبل ال Tensorboard أما write_graph فلتحديد فيما إذا كنا نريد عرض الغراف في التنسربورد أما لا، أما الوسيط الثالث فهو لتحديد فيما إذا كنت تريد عرض الأوزان في التنسربورد أيضاً. tensorboard --logdir path_to_current_dir/Graph