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

السؤال

نشر

قمت ببناء النموذج التالي في كيراس لكن يظهر لي الخطأ التالي: 

from keras.datasets import reuters
import keras
import tensorflow as tf
(train_data, train_labels), (test_data, test_labels) = reuters.load_data(
num_words=10000)
import numpy as np
def vectorize_sequences(sequences, dimension=10000):
  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.utils.np_utils import to_categorical
one_hot_train_labels = to_categorical(train_labels)
one_hot_test_labels = to_categorical(test_labels)
x_val = x_train[:1000]
partial_x_train = x_train[1000:]
# هنا
y_val = one_hot_train_labels[:1000]
partial_y_train = one_hot_train_labels[1000:]
# الآن:
partial_x_train.shape
# (7982, 10000)
partial_y_train.shape
# (7982, 46)
from keras import models
from keras import layers
model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(1000,)))
model.add(keras.layers.LayerNormalization())
model.add(layers.Dense(64, activation='relu'))
model.add(keras.layers.LayerNormalization())
model.add(layers.Dense(46, activation='softmax'))
model.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['CategoricalAccuracy'])
history = model.fit(tf.convert_to_tensor(partial_x_train, np.float32),
partial_y_train,
epochs=6,
batch_size=512,
validation_data=(x_val, y_val))
----------------------------------------------------------
 ValueError: Input 0 of layer sequential_7 is incompatible with the layer: expected axis -1 of input shape to have value 1000 but received input with shape (None, 10000)

 

 

Recommended Posts

  • 2
نشر

input_shape يمثل شكل البيانات التي ستدخل إلى طبقة معينة من نموذجك وبالتالي يجب أن تكون متوافقة مع حجم بياناتك، حيث أن كل طبقة من طبقات النموذج ستتلقى دخلأ بأبعاد معينة، لكننا لانحتاج لتحديد ذلك سوى لأول طبقة (لأن الطبقات التالية يتم استنتاج الأبعاد فيها لأنها تنتج من اختزال أبعاد الدخل على حجم الخلايا في الطبقة). وبما أن أول طبقة هي Dense فهي تتوقع منك مصفوفة (أو بمعنى أدق tensor) ثنائية الأبعاد تمثل حجم الباتش وعدد الفيتشرز features:

model = models.Sequential()
model.add(layers.Dense(64, activation='relu', input_shape=(10000,)))
model.add(keras.layers.LayerNormalization())

input_shape=(10000,) تعني أن الدخل سيكون لديه 10 آلاف features (ال axis=0 لانحدده وبالتالي سيتم قبول أي قيمة لحجم الباتش).

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...