Meezo ML نشر 7 يوليو 2021 أرسل تقرير نشر 7 يوليو 2021 قمت ببناء نموذج لتحليل المشاعر، لكن عند التدريب يظهر لي الخطأ التالي: df_train = pd.read_csv('/content/drive/MyDrive/imdbdataset/Completely_clean_data.csv') df_train.drop(df_train.filter(regex="Unname"),axis=1, inplace=True) df_test = pd.read_csv('/content/drive/MyDrive/imdbdataset/Completely_clean_data_test.csv') df_test.drop(df_test.filter(regex="Unname"),axis=1, inplace=True) max_words = 75000 tokenizer = Tokenizer(num_words=max_words) # fitting tokenizer.fit_on_texts(pd.concat([df_test['review'], df_train['review']])) #max_len=int(df["review_len"].mean()) #231 # do you remember!! train = tokenizer.texts_to_sequences(df_train['review']) test = tokenizer.texts_to_sequences(df_test['review']) train = pad_sequences(train, maxlen=200) test = pad_sequences(test, maxlen=200) print("the shape of data train :",train.shape) print("the shape of data test :",test.shape) # model def modelBiLSTM(): max_words = 75000 #drop_lstm =0.4 embeddings=128 model = Sequential() model.add(Embedding(10000, embeddings)) model.add(Bidirectional(LSTM(64, activation='tanh'))) # 2D output model.add(Dense(1, activation='sigmoid')) # binary output return model model=modelBiLSTM() model.summary() # training model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) history=model.fit(train, train_label,validation_split=0.12, batch_size=32, epochs=8) --------------------------------------------------------------------------- InvalidArgumentError Traceback (most recent call last) <ipython-input-13-850a3e320f47> in <module>() 1 model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) ----> 2 history=model.fit(train, train_label,validation_split=0.12, batch_size=32, epochs=8) 6 frames /usr/local/lib/python3.7/dist-packages/tensorflow/python/eager/execute.py in quick_execute(op_name, num_outputs, inputs, attrs, ctx, name) 58 ctx.ensure_initialized() 59 tensors = pywrap_tfe.TFE_Py_Execute(ctx._handle, device_name, op_name, ---> 60 inputs, attrs, num_outputs) 61 except core._NotOkStatusException as e: 62 if name is not None: InvalidArgumentError: indices[28,152] = 57171 is not in [0, 10000) [[node sequential_2/embedding_2/embedding_lookup (defined at /usr/local/lib/python3.7/dist-packages/keras/layers/embeddings.py:184) ]] [Op:__inference_train_function_12661] Errors may have originated from an input operation. Input Source operations connected to node sequential_2/embedding_2/embedding_lookup: sequential_2/embedding_2/embedding_lookup/10350 (defined at /usr/lib/python3.7/contextlib.py:112) sequential_2/embedding_2/Cast (defined at /usr/local/lib/python3.7/dist-packages/keras/layers/embeddings.py:183) Function call stack: train_function اقتباس
1 Ali Haidar Ahmad نشر 7 يوليو 2021 أرسل تقرير نشر 7 يوليو 2021 المشكلة تحدث في طبقة التضمين Embedding. هذه الطبقة تأخذ وسيطين على الأقل الأول هو عدد ال tokens (المفردات) الموجودة في بياناتك أي (1 + maximum word index) والثاني هو dimensionality of the embeddings أي أبعاد التضمين. يمكن اعتبار طبقة التضمين قاموس يقوم بربط أعداد صحيحة (كل عدد يمثل كلمة) بأشعة كثيفة. "maps integer indices,(which stand for specific words) to dense vectors" وبالتالي يأخذ كمدخل له عدد صحيح ثم يبحث عن هذا العدد في قاموسه ثم يرد الشعاع المقابل له. Word index --> Embedding layer --> Corresponding word vector أنت ماذا فعلت؟! أنت قمت بتحديد عدد المفردات بالنص الخاص بك إلى 75000 كلمة فريدة، ثم قمت بتحديد 10000 كلمة في طبقة التضمين وهذا سينتج خطأ لأن الكلمات الموجودة في بياناتك أكثر بكثير وبالتالي لن يجد هذه الكلمات في قاموسه الداخلي وبالتالي ينتج خطأ. لحل المشكلة يجب أن تتم مطابقتهما أي إذا حددت عدد الكلمات التي ستبقى في نصك في مرحلة ال tokenaization ب 75000 فيجب أن تحدد 75000 في طبقة التضمين أيضاً. التصحيح: df_train = pd.read_csv('/content/drive/MyDrive/imdbdataset/Completely_clean_data.csv') df_train.drop(df_train.filter(regex="Unname"),axis=1, inplace=True) df_test = pd.read_csv('/content/drive/MyDrive/imdbdataset/Completely_clean_data_test.csv') df_test.drop(df_test.filter(regex="Unname"),axis=1, inplace=True) max_words = 75000 tokenizer = Tokenizer(num_words=max_words) # fitting tokenizer.fit_on_texts(pd.concat([df_test['review'], df_train['review']])) #max_len=int(df["review_len"].mean()) #231 # do you remember!! train = tokenizer.texts_to_sequences(df_train['review']) test = tokenizer.texts_to_sequences(df_test['review']) train = pad_sequences(train, maxlen=200) test = pad_sequences(test, maxlen=200) print("the shape of data train :",train.shape) print("the shape of data test :",test.shape) # model def modelBiLSTM(): max_words = 75000 #drop_lstm =0.4 embeddings=128 model = Sequential() # الإصلاح model.add(Embedding(max_words, embeddings)) model.add(Bidirectional(LSTM(64, activation='tanh'))) # 2D output model.add(Dense(1, activation='sigmoid')) # binary output return model model=modelBiLSTM() model.summary() # training model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc']) history=model.fit(train, train_label,validation_split=0.12, batch_size=32, epochs=8) 1 اقتباس
1 ريم المهدي نشر 9 سبتمبر 2021 أرسل تقرير نشر 9 سبتمبر 2021 قيمة vocab_size أو max_words أو num_words تشير في طبقة ال embedding إلى عدد الكلمات الكلي التي تم تحويلها إلى قيم رقمية و الذي يجب أن يساوي maximum integer index + 1. لاحظ شكل الطبقة: tf.keras.layers.Embedding( input_dim, output_dim, embeddings_initializer="uniform", embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None, **kwargs ) والان لنأخذ مثال: from numpy import array from keras.preprocessing.text import one_hot from keras.preprocessing.sequence import pad_sequences from keras.models import Sequential from keras.layers import Dense from keras.layers import Flatten from keras.layers.embeddings import Embedding # تعريف المدخلات كملفات تحتوي على كلمات docs = ['Well done!', 'Good work', 'Great effort', 'nice work', 'Excellent!', 'Weak', 'Poor effort!', 'not good', 'poor work', 'Could have done better.'] # تحديد صنف لكل ملف من الملفات السابقة labels = array([1,1,1,1,1,0,0,0,0,0]) # هنا قمنا بتحديد القيمة 50 كطول للبيانات المدخلة، بالتالي أي كلمة يتم تحويلها لقيمة رقمية مقابلة لها # بأي حال من الأحوال يجب أن تكون القيمة أعلى من العدد الكلي للكلمات المختلفة حتى لا يحصل تصادم vocab_size = 50 encoded_docs = [one_hot(d, vocab_size) for d in docs] print(encoded_docs) # كل ملف يحتوي على كلمات أقل من العدد الذي تم تحديده هنا 4 يتم إضافة أصفار فيه لتصبح كل المدخلات من نفس الطول 4 max_length = 4 padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post') print(padded_docs) # تعريف النموذج model = Sequential() model.add(Embedding(vocab_size, 8, input_length=max_length)) model.add(Flatten()) model.add(Dense(1, activation='sigmoid')) # تنفيذ النموذج model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # تلخيص النموذج print(model.summary()) # تدريب النموذج model.fit(padded_docs, labels, epochs=50, verbose=0) # تقييم النموذج loss, accuracy = model.evaluate(padded_docs, labels, verbose=0) print('Accuracy: %f' % (accuracy*100)) لاحظ أننا قمنا بتمرير vocab_size إلي طبقة التضمين embedding layer بنفس الطول الذي تم تحديده مسبقاً لترميز البيانات، بالتالي يوجد تطابق ولا ينتج الخطأ السابق. اقتباس
السؤال
Meezo ML
قمت ببناء نموذج لتحليل المشاعر، لكن عند التدريب يظهر لي الخطأ التالي:
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.