Numpy: كيفية تعيين float32 كافتراضي

تم إنشاؤها على ١٩ ديسمبر ٢٠١٥  ·  21تعليقات  ·  مصدر: numpy/numpy

أستخدم cuBLAS + numpy ، ويعمل cuBLAS بسرعة كبيرة على float32 ، أسرع 10 مرات من وحدة المعالجة المركزية.
ومع ذلك ، أحتاج إلى تعيين dtype = float32 يدويًا في كل مرة ، فهذا أمر ممل. لا يدعم () random.rand () إنشاء مصفوفة float32.
هل هناك طريقة لضبط الدقة الافتراضية على float32 في numpy؟

numpy.dtype

التعليق الأكثر فائدة

هذا سيكون مفيد جدا

ال 21 كومينتر

لا يوجد اسف. وأخشى أنه من غير المحتمل أن نضيف شيئًا من هذا القبيل لأنه يجب بالضرورة أن يكون حالة عالمية ، وهذا النوع من الحالة العالمية يميل إلى خلق جميع أنواع المشاكل (على سبيل المثال ، سيحاول الأشخاص تغيير الإعداد الافتراضي داخل المكتبة ، و ثم ستبدأ التعليمات البرمجية غير ذات الصلة التي تحدث لاستخدام هذه المكتبة في رؤية مشكلات غريبة عندما تحاول الشفرة غير ذات الصلة استخدام numpy).

يمكنك إنشاء وظائف المرافق الخاصة بك واستخدامها ، على سبيل المثال:

def array(*args, **kwargs):
    kwargs.setdefault("dtype", np.float32)
    return np.array(*args, **kwargs)

هذا سيكون مفيد جدا

هذا قديم ، لكنه سيظل مفيدًا (يمكنك العثور على عدد قليل من الأسئلة على Stack Overflow يسأل عنها). هل لي أن أضيف ، حالة المكتبات العالمية ليست حقًا الخيار _only_ لهذا الغرض. يمكن أن يكون لديك متغير بيئة أو تكوين ملف أو حتى مجرد مدير سياق. على سبيل المثال ، يقدم Theano ملف تكوين ومتغير بيئة. أتخيل أنه يمكن أن يكون لديك حجم تعويم افتراضي (مثل Theano floatX ) وربما حجم عدد صحيح افتراضي (وحتى الحجم المعقد الافتراضي إذا كنت تريد دفعه؟). كما أنه ليس بنفس الأهمية تقريبًا ، ولكن هناك بالفعل على الأقل _ بعض_ الحالة العالمية في NumPy ، على سبيل المثال set_printoptions (والتي يمكنك من حيث المبدأ العبث بها من مكتبة ، أو من خيوط مختلفة) ؛ ربما لا يكون وجود طريقة موحدة لتكوين المكتبة فكرة سيئة.

أنا لا أقول أنه واضح ومباشر ، لأنه ربما يؤثر على جزء كبير من الكود ، وبالتأكيد هناك الكثير من الحالات الجانبية له ، لكنني أعتقد أنه قد يكون من المفيد التفكير فيه ، حتى لو كان فقط عنصرًا محتملاً في خارطة الطريق.

خاصةً كما هو الحال مع التعلم العميق (Tensorflow ، pytorch ، إلخ) ، يتلاعب الناس بمصفوفات من الدقة أصغر من 64 بت إلى حد كبير بنسبة 100٪ من الوقت (بشكل أساسي 32 بت ، لكن الدقة المختلطة والنماذج الكمية تكتسب الكثير من الأرض ، مع الدعم الرسمي من جميع كبار البائعين)

أنا عندي نفس المشكلة بالضبط. تواجه بعض المشاكل مع المصفوفات الكبيرة جدًا في وحدة طويلة جدًا تؤدي إلى إجراء العديد من الاستدعاءات لـ np.array . لا يمكن تغيير جميع الاستدعاءات لتحديد الوسيطة الاختيارية (dtype = np.float32). أريد فقط أن أخبر numpy باستخدام float32 بدلاً من float64. يتم تبديل نظام التشغيل الآن. الرجاء المساعدة.

أكره أن أفعل هذا في كل مرة

soulslicer ، تم إغلاق هذه المشكلة ، ولن نغير هذا في المستقبل PYTHONSTARTUP للعمل التفاعلي ، أو وضعه في ملف واستيراده عند بدء تشغيل المشروع.

import numpy as np
_oldarray = np.array
def array32(*args, **kwargs):
    if 'dtype' not in kwargs:
        kwargs['dtype] = 'float32'
    _oldarray(*args, **kwargs)
np.array = _oldarray

هيه ، طريقة أخرى ؛)

from functools import partial
import numpy as np
array32 = partial(np.array, dtype=np.float32)

لمعلوماتك مع الشبكات العصبية العميقة التي أصبحت ضخمة جدًا ، فسيكون المزيد والمزيد من الأشخاص بعد هذه الميزة.

لول @ numpy

مرحبًا ، أريد أن يشغل كل رقم 38 عربة على جهاز الكمبيوتر الخاص بك

هذا ليس ما هو على المحك هنا JadBatmobile

أوضح نجسميث بعبارات واضحة قبل 3 سنوات لماذا تؤدي هذه "الميزة" بسهولة شديدة (اقرأ: في سطر واحد من التعليمات البرمجية) إلى الكثير من الأخطاء الكامنة وغير المحلية. يجب استخدام هذه "الميزة" بشكل مسؤول فقط. لا أعتقد أن تطبيق الميزات التي يجب استخدامها بشكل مسؤول فكرة جيدة. إذا كنت تعلم أنك تستخدمه ، وستستخدمه بشكل مسؤول: اختر واحدًا من الاقتراحات العديدة المذكورة في هذا الموضوع (وحتى أكثر من ذلك في مكان آخر) ، واجعل الكود الخاص بك يتصرف صراحةً بهذه الطريقة.

adeak لست متأكدًا مما إذا كانت هذه فكرة جيدة ، ولكن ربما يكون بعض مدير السياق بمثابة حل وسط جيد؟

كود مزيف:

<strong i="8">@contextmanager</strong>
def default_dtype(dtype):
    # read current default dtype and change to the one provided
    original_dtype = read_current_default_dtype()
    change_default_dtype(dtype)
    yield
    # change default dtype to original value
    change_default_dtype(original_dtype)

استعمال:

with np.default_dtype(np.float32):
    # do float32 stuff

@ dankal444 إذا فهمت بشكل صحيح لا شيء من شأنه أن يمنع الناس من أن يكونوا كسالى change_default_dtype(dtype) المشؤوم يدويًا ، مع عدم وجود ضمان للتنظيف.

adeak اعتقدت أن هذه الطريقة "المشؤومة" يمكن أن تكون مخفية عن منظور الناس وأن مدير السياق هو الوحيد المتاح

أظن أن الأشخاص الذين يطلبون هذه الميزة لن يكونوا سعداء بمدير السياق ؛ قد يكون ذلك أكثر تعقيدًا من خطوة تكوين مخصصة واحدة يتم إجراؤها مرة واحدة. يمكن للناس فقط البدء في استخدام الوظيفة غير العامة التي لها حالة عالمية لتجاوزها ، وهزيمة الغرض.

لا أعتقد أن مديري السياق يساعدون كثيرًا. ستواجه دائمًا مشكلة أنك قد تستخدم وظائف المصب التي تستخدم الدقة الأكبر لسبب وجيه ، ويمكنك فقط كسرها. هيك ، قد تتسبب في حدوث segfault ، لأن كود واجهة C ليس لديه سبب لمضاعفة التحقق من أن المصفوفة التي تم إنشاؤها حديثًا تحتوي على نوع بيانات خاطئ.

أجد في المستوى المنخفض ، هناك NPY_DEFAULT_TYPE ، ربما يمكن أن توفر numpy وظيفة لتعديل هذه القيمة المتغيرة إلى float32؟

من الصعب حقًا إعلان نوع np.float32 dtype عند إنشاء مصفوفة جديدة

https://docs.scipy.org/doc/numpy-1.15.1/reference/c-api.dtype.html؟highlight=default_type#c.NPY_DEFAULT_TYPE

2zly45

[بوب] كيف يمكنني إنشاء مصفوفة float32 عشوائية تستهلك 90٪ من ذاكرة الوصول العشوائي المتاحة؟
[نومبي] فقط ضاعف ذاكرة الوصول العشوائي ...

كل شخص لديه رأي يتربص بالتعبير هذه الأيام ، ورأيي هو أن هذا ربما يكون أحد أكثر قرارات التصميم "جنونًا ووحشية" التي رأيتها على الإطلاق ، ويستحق ترشيحًا صحيحًا لقاعة الشهرة الخاصة بي

"مجنون وعديم الرحمة" * - تعبير اصطلاحي مصدره روسي

[قول مأثور 1] إذا كان مقيدًا ، فلا يهم مدى نحافة الهندسة المعمارية الخاصة بك.
[القول المأثور 2] في كثير من الحالات ، تكون كلمة Pythonic مجرد تسمية ، وآخرها يغطي العار

مرة أخرى: سبب عدم تنفيذ هذا ليس لأننا مثل إضاعة الذاكرة الخاصة بك، انها أنه سيتم قطع جميع أنواع الأشياء وتسبب لك للحصول على اجابات خاطئة بصمت. تؤكد حقيقة أن الكثير من الناس يعتقدون أنه شيء "واضح" يجب القيام به أن معظم الناس لا يفهمون العواقب الكاملة هنا ، ولن يكونوا مستعدين للحكم على متى تكون هذه الميزة آمنة للاستخدام ومتى لا تكون كذلك.

أسمع الألم الذي تعاني منه جميعًا ؛ هذا صحيح تمامًا ، ونود مساعدتك إذا كان ذلك ممكنًا. ولكن للقيام بذلك ، يجب على شخص ما أن يأتي بخطة لا تحطم كل شيء.

قفل هذه المشكلة لأنه من الواضح أنها نقطة جذب للتعليقات غير المنتجة. إذا كانت لديك فكرة جديدة ، يرجى فتح عدد جديد.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات