جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
الشبكات العصبية - الدرس 6
دليل شامل للواجهة التسلسلية، بناء النماذج، التدريب، والواجهة الوظيفية
Sequentialimport keras
from keras import layers, ops
model = keras.Sequential([
keras.Input(shape=(3, 1)),
layers.Dense(2, activation="relu", name="layer1"),
layers.Dense(3, activation="relu", name="layer2"),
layers.Dense(4, name="layer3"),
])Layer Sharing)، أو بنية غير خطية (اتصال متبق residual، أو نموذج متعدد الفروع)add() / pop()model = keras.Sequential([
layers.Dense(2, activation="relu"),
layers.Dense(3, activation="relu"),
layers.Dense(4),
])
model.layers # قائمة من 3 طبقات Dense
model = keras.Sequential()
model.add(layers.Dense(2, activation="relu"))
model.add(layers.Dense(3, activation="relu"))
model.pop() # يزيل الطبقة الأخيرةname، مفيد لرسوم TensorBoard البيانيةlayer = layers.Dense(3)
layer.weights # []
x = ops.ones((1, 4))
y = layer(x)
layer.weights # now shape (4,3) kernel and (3,) biasSequential بلا Input(shape=...) ليس مبنيا: بلا أوزان حتى يرى بياناتmodel(x) على بيانات حقيقية يطلق إنشاء الأوزان لكل طبقةsummary()keras.Input(shape=...) مسبقا يمنح النموذج معرفة شكله فورا، فيمتلك أوزانا دائما وشكل مخرج معروفا دائماmodel = keras.Sequential()
model.add(keras.Input(shape=(4,)))
model.add(layers.Dense(2, activation="relu"))
model.summary()dense_10 (Dense) (None, 2) 10
Total params: 10model.summary()summary() كثيرا أثناء البناء التدريجيDense: طبقتان مخفيتان بتنشيط ReLU، وطبقة إخراج واحدة بـsoftmax لـ10 فئاتmodel = keras.Sequential()
model.add(keras.Input(shape=(784,)))
model.add(layers.Dense(64, activation="relu"))
model.add(layers.Dense(64, activation="relu"))
model.add(layers.Dense(10, activation="softmax"))dense_11 (Dense) (None, 64) 50,240
dense_12 (Dense) (None, 64) 4,160
dense_13 (Dense) (None, 10) 650
Total params: 55,050 (215.04 KB)model.summary()784، وطبعها إلى [0, 1](x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data()
x_train = x_train.reshape(60000, 784).astype("float32") / 255
x_test = x_test.reshape(10000, 784).astype("float32") / 255
# Reserve 10,000 samples for validation
x_val, y_val = x_train[-10000:], y_train[-10000:]
x_train, y_train = x_train[:-10000], y_train[:-10000]compile(): الخسارة والمحسن والمقاييسcompile()| تنسيق التسميات | دالة الخسارة | المقياس |
|---|---|---|
| تسميات صحيحة (integers) | SparseCategoricalCrossentropy | SparseCategoricalAccuracy |
| تسميات one-hot | categorical_crossentropy | categorical_accuracy |
| تسميات ثنائية | binary_crossentropy | BinaryAccuracy |
model.compile(
optimizer=keras.optimizers.RMSprop(learning_rate=1e-3),
loss=keras.losses.SparseCategoricalCrossentropy(),
metrics=[keras.metrics.SparseCategoricalAccuracy()],
)
# Shortcut with string identifiers:
# model.compile(optimizer="rmsprop", loss="sparse_categorical_crossentropy",
# metrics=["sparse_categorical_accuracy"])fit(): تدريب النموذجfit()epochs من المراتvalidation_data عن خسارة/مقاييس التحقق في نهاية كل حقبةhistory = model.fit(
x_train, y_train,
batch_size=64,
epochs=2,
validation_data=(x_val, y_val),
)Epoch 1/2 - loss: 0.5733 - sparse_categorical_accuracy: 0.8410 - val_loss: 0.3036 - val_sparse_categorical_accuracy: 0.9113
Epoch 2/2 - loss: 0.1803 - sparse_categorical_accuracy: 0.9460 - val_loss: 0.1403 - val_sparse_categorical_accuracy: 0.9594| المعامل | الوصف |
|---|---|
x | بيانات الإدخال (مصفوفة NumPy، أو Tensor، أو Dataset) |
y | التسميات المستهدفة (بنفس تنسيق مخرجات النموذج) |
batch_size | عدد العينات في كل تحديث للتدرج (الافتراضي 32) |
epochs | عدد مرات المرور عبر مجموعة البيانات بأكملها |
validation_data | زوج (val_x, val_y) لتقييم النموذج في نهاية كل حقبة |
shuffle | هل يتم خلط بيانات التدريب قبل كل حقبة (الافتراضي True) |
verbose | 0 بدون مخرجات، 1 شريط تقدم، 2 سطر واحد لكل حقبة |
history.history قاموسا بقيم الخسارة/المقاييس المسجلة لكل حقبةevaluate() وpredict()evaluate()predict()results = model.evaluate(x_test, y_test, batch_size=128)
print("test loss, test acc:", results)
# test loss, test acc: [0.147, 0.956]
predictions = model.predict(x_test[:3])
print("predictions shape:", predictions.shape) # (3, 10)دراسة ذاتية
Sequential: البنية غير الخطية، الطبقات المشتركة، والمدخلات/المخرجات المتعددةالإدخال
متجه بـ784 بعدا
Dense 64
relu
Dense 64
relu
Dense 10
الإخراج
inputs = keras.Input(shape=(784,)) # input node
dense = layers.Dense(64, activation="relu")
x = dense(inputs) # "layer call" = drawing an arrow
x = layers.Dense(64, activation="relu")(x)
outputs = layers.Dense(10)(x)
model = keras.Model(inputs=inputs, outputs=outputs, name="mnist_model")inputs.shape تساوي (None, 784)، وinputs.dtype تساوي 'float32'، لأن بعد الدفعة يحذف دائماmodel.summary() بالطريقة نفسها في نماذج Sequentialkeras.utils.plot_model() الرسم البياني بصريا، اختياريا مع معلومات الشكلmodel.summary()
# input_layer_4 (InputLayer) (None, 784) 0
# dense_14 (Dense) (None, 64) 50,240
# dense_15 (Dense) (None, 64) 4,160
# dense_16 (Dense) (None, 10) 650
keras.utils.plot_model(model, "my_first_model.png")
keras.utils.plot_model(model, "my_first_model_with_shape_info.png", show_shapes=True)Sequential تكديس الطبقات الخطي؛ وتتعامل الواجهة الوظيفية مع التفرع والمشاركة والرسوم البيانية متعددة المدخلات/المخرجاتInput(shape=...) مسبقا للحصول على نموذج مبني بالكاملmodel.summary() هي أسرع طريقة للتحقق من أشكال الطبقات وعدد المعاملات أثناء البناءcompile() المحسن والخسارة والمقاييس؛ طابق الخسارة مع ترميز تسمياتك (صحيحة أو one-hot أو ثنائية)fit() بالدفعات والحقب والتحقق؛ وتتولى evaluate() وpredict() الاستدلال وقت الاختبارoutput = layer(input)، مسلسلة في DAGMahmoud Abas|نموذج Keras Sequential