Meezo ML نشر 3 يوليو 2021 أرسل تقرير نشر 3 يوليو 2021 أحاول تدريب شبكة عصبية لتحليل المشاعر، لكن يظهر لي الخطأ التالي: from keras.datasets import imdb from keras.layers import Embedding, SimpleRNN from keras.models import Sequential (input_train, y_train), (input_test, y_test) = imdb.load_data( num_words=max_features) print(len(input_train), 'train sequences') print(len(input_test), 'test sequences') print('input_train shape:', input_train.shape) print('input_test shape:', input_test.shape) from keras.layers import Dense model = Sequential() model.add(Embedding(10000, 32)) model.add(SimpleRNN(32)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) history = model.fit(input_train, y_train, epochs=2, batch_size=32, validation_split=0.2) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-53-0d042e98c73b> in <module> 17 epochs=2, 18 batch_size=32, ---> 19 validation_split=0.2) ~\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py in fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing) 1062 use_multiprocessing=use_multiprocessing, 1063 model=self, -> 1064 steps_per_execution=self._steps_per_execution) 1065 1066 # Container that configures and calls `tf.keras.Callback`s. ~\anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in __init__(self, x, y, sample_weight, batch_size, steps_per_epoch, initial_epoch, epochs, shuffle, class_weight, max_queue_size, workers, use_multiprocessing, model, steps_per_execution) 1110 use_multiprocessing=use_multiprocessing, 1111 distribution_strategy=ds_context.get_strategy(), -> 1112 model=model) 1113 1114 strategy = ds_context.get_strategy() ~\anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in __init__(self, x, y, sample_weights, sample_weight_modes, batch_size, epochs, steps, shuffle, **kwargs) 261 **kwargs): 262 super(TensorLikeDataAdapter, self).__init__(x, y, **kwargs) --> 263 x, y, sample_weights = _process_tensorlike((x, y, sample_weights)) 264 sample_weight_modes = broadcast_sample_weight_modes( 265 sample_weights, sample_weight_modes) ~\anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in _process_tensorlike(inputs) 1014 return x 1015 -> 1016 inputs = nest.map_structure(_convert_numpy_and_scipy, inputs) 1017 return nest.list_to_tuple(inputs) 1018 ~\anaconda3\lib\site-packages\tensorflow\python\util\nest.py in map_structure(func, *structure, **kwargs) 657 658 return pack_sequence_as( --> 659 structure[0], [func(*x) for x in entries], 660 expand_composites=expand_composites) 661 ~\anaconda3\lib\site-packages\tensorflow\python\util\nest.py in <listcomp>(.0) 657 658 return pack_sequence_as( --> 659 structure[0], [func(*x) for x in entries], 660 expand_composites=expand_composites) 661 ~\anaconda3\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py in _convert_numpy_and_scipy(x) 1009 if issubclass(x.dtype.type, np.floating): 1010 dtype = backend.floatx() -> 1011 return ops.convert_to_tensor_v2_with_dispatch(x, dtype=dtype) 1012 elif scipy_sparse and scipy_sparse.issparse(x): 1013 return _scipy_sparse_to_sparse_tensor(x) ~\anaconda3\lib\site-packages\tensorflow\python\util\dispatch.py in wrapper(*args, **kwargs) 199 """Call target, and fall back on dispatchers if there is a TypeError.""" 200 try: --> 201 return target(*args, **kwargs) 202 except (TypeError, ValueError): 203 # Note: convert_to_eager_tensor currently raises a ValueError, not a ~\anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in convert_to_tensor_v2_with_dispatch(value, dtype, dtype_hint, name) 1403 """ 1404 return convert_to_tensor_v2( -> 1405 value, dtype=dtype, dtype_hint=dtype_hint, name=name) 1406 1407 ~\anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in convert_to_tensor_v2(value, dtype, dtype_hint, name) 1413 name=name, 1414 preferred_dtype=dtype_hint, -> 1415 as_ref=False) 1416 1417 ~\anaconda3\lib\site-packages\tensorflow\python\profiler\trace.py in wrapped(*args, **kwargs) 161 with Trace(trace_name, **trace_kwargs): 162 return func(*args, **kwargs) --> 163 return func(*args, **kwargs) 164 165 return wrapped ~\anaconda3\lib\site-packages\tensorflow\python\framework\ops.py in convert_to_tensor(value, dtype, name, as_ref, preferred_dtype, dtype_hint, ctx, accepted_result_types) 1538 1539 if ret is None: -> 1540 ret = conversion_func(value, dtype=dtype, name=name, as_ref=as_ref) 1541 1542 if ret is NotImplemented: ~\anaconda3\lib\site-packages\tensorflow\python\framework\tensor_conversion_registry.py in _default_conversion_function(***failed resolving arguments***) 50 def _default_conversion_function(value, dtype, name, as_ref): 51 del as_ref # Unused. ---> 52 return constant_op.constant(value, dtype, name=name) 53 54 ~\anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in constant(value, dtype, shape, name) 263 """ 264 return _constant_impl(value, dtype, shape, name, verify_shape=False, --> 265 allow_broadcast=True) 266 267 ~\anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in _constant_impl(value, dtype, shape, name, verify_shape, allow_broadcast) 274 with trace.Trace("tf.constant"): 275 return _constant_eager_impl(ctx, value, dtype, shape, verify_shape) --> 276 return _constant_eager_impl(ctx, value, dtype, shape, verify_shape) 277 278 g = ops.get_default_graph() ~\anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in _constant_eager_impl(ctx, value, dtype, shape, verify_shape) 299 def _constant_eager_impl(ctx, value, dtype, shape, verify_shape): 300 """Implementation of eager constant.""" --> 301 t = convert_to_eager_tensor(value, ctx, dtype) 302 if shape is None: 303 return t ~\anaconda3\lib\site-packages\tensorflow\python\framework\constant_op.py in convert_to_eager_tensor(value, ctx, dtype) 96 dtype = dtypes.as_dtype(dtype).as_datatype_enum 97 ctx.ensure_initialized() ---> 98 return ops.EagerTensor(value, ctx.device_name, dtype) 99 100 ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list). اقتباس
1 Ali Haidar Ahmad نشر 3 يوليو 2021 أرسل تقرير نشر 3 يوليو 2021 (معدل) عند التعامل مع المسائل التي تندرج تحت ال NLP هناك خطوة مهمة يجب القيام بها قبل إرسال ال Data إلى الطبقات للتدرب عليها وهي وضع القيم في مصفوفة ذات أبعاد ثابتة. أثناء تجهيز البيانات النصية (النصوص، حيث كل عينة تكون عبارة عن نص) وترميزها رقمياً (إسناد عدد صحيح يمثل كل كلمة ثم تمثيل النص كسلسلة من الأعداد الصحيحة) ستكون بعض النصوص أطول من الأخرى وهذا شيء مؤكد وبديهي (أي أول عينة قد يكون طولها 500 والأخرى 1000 وو). لذا لإدخالها إلى شبكة عصبية يجب علينا أولاً توحيد طول كل عينة (طول كل نص أو طول كل سلسلة رقمية كوننا قمنا بترميزها رقمياً)، وهذا التوحيد يكون عبر اختيارنا للحجم الذي نراه مناسياً لكل سلسلة وليكن x، ثم نمر على كل العينات ونقطع كل سلسلة طولها أكبر من (بالتالي نجعلها 500 فقط)، أما إذا كانت أقل من x فنقوم (بحشوها) بأصفار، وهذا مايتم من خلال التابع pad_sequences كما سترى في المثال، وهذا مايجب عليك القيام به قبل إدخالالبيانات إلى شبكتك، فهذا هو سبب الخطأ الذي ظهر ValueError: Failed to convert a NumPy array to a Tensor (Unsupported object type list). فهو غير قادر على تحويل list لإى tensor بأبعاد مختلفة، يجب أن تقوم بتوحيد الأبعاد لكل العينات. التصحيح: from keras.datasets import imdb from keras.layers import Embedding, SimpleRNN from keras.models import Sequential (input_train, y_train), (input_test, y_test) = imdb.load_data( num_words=max_features) print(len(input_train), 'train sequences') print(len(input_test), 'test sequences') ################ نضيف################### from keras.preprocessing import sequence maxlen = 500 print('Pad sequences (samples x time)') input_train = sequence.pad_sequences(input_train, maxlen=maxlen) input_test = sequence.pad_sequences(input_test, maxlen=maxlen) ############# انتهى#################### print('input_train shape:', input_train.shape) print('input_test shape:', input_test.shape) from keras.layers import Dense model = Sequential() model.add(Embedding(10000, 32)) model.add(SimpleRNN(32)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) history = model.fit(input_train, y_train, epochs=2, batch_size=32, validation_split=0.2) ------------------------------------------------- 25000 train sequences 25000 test sequences Pad sequences (samples x time) input_train shape: (25000, 500) input_test shape: (25000, 500) Epoch 1/2 625/625 [==============================] - 79s 111ms/step - loss: 0.6659 - acc: 0.5671 - val_loss: 0.4343 - val_acc: 0.8116 Epoch 2/2 625/625 [==============================] - 67s 108ms/step - loss: 0.3630 - acc: 0.8477 - val_loss: 0.3880 - val_acc: 0.8262 تم التعديل في 3 يوليو 2021 بواسطة Ali Haidar Ahmad 2 اقتباس
0 ريم المهدي نشر 11 يوليو 2021 أرسل تقرير نشر 11 يوليو 2021 td في كل نماذج تعلم الألة يجب أن ننتبه لشيئين أساسين، الأول هو أن النموذج يتعامل مع بيانات ذات طول واحد، أي أن كل عينة يجب أن يكون شكلها نفس شكل بقية العينات في بيانات التدريب و الإختبار. ذلك لأن هيكل النموذج يبنى مرة واحدة و المتغير هو قيم الأوزان المضروبة في القيم الداخلة للنموذج، وهذه تغير في دقة النموذج و ليس شكله. الشئ الثاني هو الإنتباه لشكل البيانات المدخلة مقابل الشكل المتوقع في النموذج، وذلك يعنى ان ننتبه للقيم الممرة في شكل parameters للنموذج. الأن لنقوم بإنشاء النموذج وطباعة ملخصه: model = Sequential() model.add(Embedding(10000, 32)) model.add(SimpleRNN(32)) model.add(Dense(1, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) model.summary() Model: "sequential_37" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= embedding_12 (Embedding) (None, None, 32) 320000 _________________________________________________________________ simple_rnn_2 (SimpleRNN) (None, 32) 2080 _________________________________________________________________ dense_57 (Dense) (None, 1) 33 ================================================================= Total params: 322,113 Trainable params: 322,113 Non-trainable params: 0 _________________________________________________________________ لاحظ شكل النموذج، يتوقع منك الكلمات المحولة لأرقام صحيحة بأن تحتوي على متجهات ذات 32 لكل قيمة unique أو الرقم الذي يشير للكلمة في مجموعة البيانات. الأن القيمة المتوقعة في حال عدم تحديد شكل المدخل ستكون على هيئة (batch_size, input_length) وبالتالي فإن الطول لكل عينة يجب أن يكون متساوي. دعنا نلقى نظرة على أطوال أول 10 عينات: for i in range(10): print(len(input_train[i])) 218 189 141 550 147 43 123 562 233 130 لاحظ إختلاف القيم عن بعضها، بالتالي يجب أن نقوم بتوحيد أطوالها، ذلك يتم بإستخدام pad_sequences وهي الدالة التي تقوم بحساب أطول عينة و إسناد طولها لبقية العينات (هذا إن لم يتم تحديد طول معين)، وذلك يتم عن طريق وضع أصفار إلى وصول العينة الأقل طولاً للطول المطلوب، لاحظ المثال التالي: from keras.preprocessing.sequence import pad_sequences sequences = [[1, 2, 3, 4], [1, 2, 3], [1]] pad_sequences(sequences) والان الدالة ستقوم بإسناد أصفار لكل مدخل قيمته أقل من 4، لنرى النتائج: array([[1, 2, 3, 4], [0, 1, 2, 3], [0, 0, 0, 1]], dtype=int32) اقتباس
السؤال
Meezo ML
أحاول تدريب شبكة عصبية لتحليل المشاعر، لكن يظهر لي الخطأ التالي:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.