اذهب إلى المحتوى

السؤال

نشر (معدل)

قمت بتحميل مجموعة بيانات imdb (مجموعة بيانات لمراجعات الأفلام على الموقع الشهير imdb)لكن البيانات النصية تكون مختلفة الأطوال كما نعلم  (مثلاً إحدى المراجعات طولها 100 كلمة و أخرى طولها 20 وهكذا)، كيف يمكننا استخدام التابع pad_sequences لتوحيد أطوالها وتحويلها إلى مصفوفة؟ لأنني أريد تغذية الشبكةالعصبية التالية بها:

model = Sequential()
model.add(Embedding(10000, 8, input_length=maxlen))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.summary()
history = model.fit(x_train, y_train,
epochs=10,
batch_size=32,
validation_split=0.2)

  

تم التعديل في بواسطة Meezo ML

Recommended Posts

  • 1
نشر

إن الخطوة الأخيرة التي تسبق تغذية شبكتك العصبية بالبيانات هي توحيد طول السلاسل، حتى لو كنت تستخدم أي نوع من الشبكات يجب القيام بهذه الخطوة (لكن تختلف طريقة التوحيد تبعاُ لنوع ترميزك طبعاً وهنا نستخدم word-embedding ,وهي الطريقة الأكثر فعالية طبعاً). كما أشرت فإن السلاسل النصية تكون بأطوال مختلفة وهذا أمر غير مقبول لأن طبقة التضمين تتوقع منك مصفوفة ثنائية الأبعاد تحديداً numpy array ثم تحولها تلقائياً (من دون تدخلك) إلى tensor، لكن لايمكن لل tensor أن تكون بأبعاد مختلفة وإنما يجب أن تكون بأبعاد محددة وثابتة ولهذا السبب نقوم بعملية حشو و قطع للسلاسل النصية في بياناتنا، بحيث نحدد طول معين نريده وليكن 50 ثم نمر على كل السلاسل في بياناتنا، وكل سلسلة أطول من 50 نقوم بقطعها (أي نأخذ أول 50 كلمة فقط)، وكل كلمة أقصر من  50 نقوم بحشوها بأصفار، وهذا تماماً مايقوم له التابع الجميل الذي اسمه pad_seq في كيراس وتنسرفلو إليك الحل:

from keras.datasets import imdb
from keras import preprocessing
max_features = 10000
maxlen = 20
(x_train, y_train), (x_test, y_test) = imdb.load_data(
num_words=max_features)
x_train = preprocessing.sequence.pad_sequences(x_train, maxlen=maxlen) # هنا حددنا طول الكلمات ب 20
x_test = preprocessing.sequence.pad_sequences(x_test, maxlen=maxlen)
# بناء نموذجك
from keras.models import Sequential
from keras.layers import Flatten, Dense
model = Sequential()
model.add(Embedding(10000, 8, input_length=maxlen))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
model.summary()
# تدريبه
history = model.fit(x_train, y_train,
epochs=10,
batch_size=32,
validation_split=0.2)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...