Meezo ML نشر 30 يونيو 2021 أرسل تقرير نشر 30 يونيو 2021 (معدل) أقوم ببناء نموذج تصنيف متعدد لكن تظهر لي المشكلة التالية عندما أحاول تدريب النموذج، فما هي المشكلة: from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=1000) import numpy as np def vectorize_sequences(sequences, dimension=1000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(1000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) history = model.fit(x_train, train_labels, epochs=8, batch_size=512, validation_split=0.2) Epoch 1/8 --------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-15-00a9a197f4b0> in <module> 24 epochs=8, 25 batch_size=512, ---> 26 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) 1098 _r=1): 1099 callbacks.on_train_batch_begin(step) -> 1100 tmp_logs = self.train_function(iterator) 1101 if data_handler.should_sync: 1102 context.async_wait() ~\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py in __call__(self, *args, **kwds) 826 tracing_count = self.experimental_get_tracing_count() 827 with trace.Trace(self._name) as tm: --> 828 result = self._call(*args, **kwds) 829 compiler = "xla" if self._experimental_compile else "nonXla" 830 new_tracing_count = self.experimental_get_tracing_count() ~\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py in _call(self, *args, **kwds) 869 # This is the first call of __call__, so we have to initialize. 870 initializers = [] --> 871 self._initialize(args, kwds, add_initializers_to=initializers) 872 finally: 873 # At this point we know that the initialization is complete (or less ~\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py in _initialize(self, args, kwds, add_initializers_to) 724 self._concrete_stateful_fn = ( 725 self._stateful_fn._get_concrete_function_internal_garbage_collected( # pylint: disable=protected-access --> 726 *args, **kwds)) 727 728 def invalid_creator_scope(*unused_args, **unused_kwds): ~\anaconda3\lib\site-packages\tensorflow\python\eager\function.py in _get_concrete_function_internal_garbage_collected(self, *args, **kwargs) 2967 args, kwargs = None, None 2968 with self._lock: -> 2969 graph_function, _ = self._maybe_define_function(args, kwargs) 2970 return graph_function 2971 ~\anaconda3\lib\site-packages\tensorflow\python\eager\function.py in _maybe_define_function(self, args, kwargs) 3359 3360 self._function_cache.missed.add(call_context_key) -> 3361 graph_function = self._create_graph_function(args, kwargs) 3362 self._function_cache.primary[cache_key] = graph_function 3363 ~\anaconda3\lib\site-packages\tensorflow\python\eager\function.py in _create_graph_function(self, args, kwargs, override_flat_arg_shapes) 3204 arg_names=arg_names, 3205 override_flat_arg_shapes=override_flat_arg_shapes, -> 3206 capture_by_value=self._capture_by_value), 3207 self._function_attributes, 3208 function_spec=self.function_spec, ~\anaconda3\lib\site-packages\tensorflow\python\framework\func_graph.py in func_graph_from_py_func(name, python_func, args, kwargs, signature, func_graph, autograph, autograph_options, add_control_dependencies, arg_names, op_return_value, collections, capture_by_value, override_flat_arg_shapes) 988 _, original_func = tf_decorator.unwrap(python_func) 989 --> 990 func_outputs = python_func(*func_args, **func_kwargs) 991 992 # invariant: `func_outputs` contains only Tensors, CompositeTensors, ~\anaconda3\lib\site-packages\tensorflow\python\eager\def_function.py in wrapped_fn(*args, **kwds) 632 xla_context.Exit() 633 else: --> 634 out = weak_wrapped_fn().__wrapped__(*args, **kwds) 635 return out 636 ~\anaconda3\lib\site-packages\tensorflow\python\framework\func_graph.py in wrapper(*args, **kwargs) 975 except Exception as e: # pylint:disable=broad-except 976 if hasattr(e, "ag_error_metadata"): --> 977 raise e.ag_error_metadata.to_exception(e) 978 else: 979 raise ValueError: in user code: C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:805 train_function * return step_function(self, iterator) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:795 step_function ** outputs = model.distribute_strategy.run(run_step, args=(data,)) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:1259 run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:2730 call_for_each_replica return self._call_for_each_replica(fn, args, kwargs) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\distribute\distribute_lib.py:3417 _call_for_each_replica return fn(*args, **kwargs) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:788 run_step ** outputs = model.train_step(data) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\engine\training.py:756 train_step y, y_pred, sample_weight, regularization_losses=self.losses) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\engine\compile_utils.py:203 __call__ loss_value = loss_obj(y_t, y_p, sample_weight=sw) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\losses.py:152 __call__ losses = call_fn(y_true, y_pred) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\losses.py:256 call ** return ag_fn(y_true, y_pred, **self._fn_kwargs) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper return target(*args, **kwargs) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\losses.py:1537 categorical_crossentropy return K.categorical_crossentropy(y_true, y_pred, from_logits=from_logits) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\util\dispatch.py:201 wrapper return target(*args, **kwargs) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\keras\backend.py:4833 categorical_crossentropy target.shape.assert_is_compatible_with(output.shape) C:\Users\Windows.10\anaconda3\lib\site-packages\tensorflow\python\framework\tensor_shape.py:1134 assert_is_compatible_with raise ValueError("Shapes %s and %s are incompatible" % (self, other)) ValueError: Shapes (None, 1) and (None, 46) are incompatible تم التعديل في 30 يونيو 2021 بواسطة Meezo ML اقتباس
1 Ali Haidar Ahmad نشر 30 يونيو 2021 أرسل تقرير نشر 30 يونيو 2021 عند استخدام دالة التكلفة categorical_crossentropy يجب أن تقوم بترميز الفئات لديك باستخدام الترميز One-Hot فهي معرفة للتعامل فقط مع هذا الترميز للبيانات. لذا يكون الحل في ترميز فئات البيانات لديك باستخدام One-Hot ويمكنك القيام بذلك عن طريق استخدام الوظيفة to_categorical في كيراس كالتالي: # تحميل الداتا from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=1000) #ترميز الفئات المختلفة للبيانات #كما أشرنا One-Hot-Enoding نستخدم الترميز from keras.utils.np_utils import to_categorical # One-Hot-Enoding one_hot_train_labels = to_categorical(train_labels) one_hot_test_labels = to_categorical(test_labels) #أي الفئات target انتهينا من ترميز قيم ال import numpy as np def vectorize_sequences(sequences, dimension=1000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) # بناء الشبكة from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(1000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) # تجميع النموذج model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # التدريب history = model.fit(x_train, one_hot_train_labels, epochs=8, batch_size=512, validation_split=0.2) أو يمكنك استخدام دالة التكلفة sparse_categorial_crossentropy بدلاً من categorial_crossentropy، فهي تستطيع التعامل مع الترميز العددي بدون الحاجة إلى الترميز الفئوي One-Hot. # تحميل الداتا from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels) = reuters.load_data( num_words=1000) import numpy as np def vectorize_sequences(sequences, dimension=1000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) # بناء الشبكة from keras import models from keras import layers model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(1000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) # تجميع النموذج model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # التدريب history = model.fit(x_train, train_labels, epochs=8, batch_size=512, validation_split=0.2) اقتباس
1 ريم المهدي نشر 30 يونيو 2021 أرسل تقرير نشر 30 يونيو 2021 في البداية قبل تنفيذ عملية التصنيف يمكنك مراجعة شكل البيانات الداخلة و خصوصاً y لانها التي تستخدم في عملية المقارنة بين القيم الحقيقية و المتوقعة من قبل النموذج، بذلك طريقة حساب الدقة للنموذج. لاحظ في البيانات المدخلة أن y لديها 45 صنف مختلف: np.array(np.unique(train_labels, return_counts=True)).T هنالك دالة OneHotEncoder التي تحول القيم الداخلة من أرقام الى التمثيل المقابل لها بإستخدام المصفوفات، راجع البرنامج التالي وهو عبارة عن تحويل 3 قيم فقط كمثال: import pandas as pd y = np.array([0,1,2]).reshape(-1,1) #تعريف القيم from sklearn.preprocessing import OneHotEncoder #مناداة OneHotEncoder من الموديول enc = OneHotEncoder(handle_unknown='ignore') # التعريف enc.fit_transform(y).toarray() #تطبيق عملية التحويل فبالتالي التعديل في برنامج يكون كالتالي: import numpy as np from keras import models from keras import layers from keras.datasets import reuters from sklearn.preprocessing import OneHotEncoder (train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=1000) def vectorize_sequences(sequences, dimension=1000): results = np.zeros((len(sequences), dimension)) for i, sequence in enumerate(sequences): results[i, sequence] = 1. return results x_train = vectorize_sequences(train_data) x_test = vectorize_sequences(test_data) enc = OneHotEncoder(handle_unknown='ignore') train_labels1 = enc.fit_transform(train_labels.reshape(-1,1)).toarray() test_labels1 = enc.fit_transform(test_labels.reshape(-1,1)).toarray() model = models.Sequential() model.add(layers.Dense(64, activation='relu', input_shape=(1000,))) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(46, activation='softmax')) model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) history = model.fit(x_train, train_labels1, epochs=8, batch_size=512, validation_split=0.2) 1 اقتباس
السؤال
Meezo ML
أقوم ببناء نموذج تصنيف متعدد لكن تظهر لي المشكلة التالية عندما أحاول تدريب النموذج، فما هي المشكلة:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.