मैं केरस में एक कन्वेन्शनल मॉडल को ट्रेनिंग दे रहा हूं। मेरे प्रशिक्षण डेटा का आकार है

(60000, 28, 28, 1)

मैं यहां एक साधारण मॉडल बनाता हूं

model = Sequential()

model.add(
    Conv2D(
        filters=32,
        kernel_size=(4, 4), 
        input_shape=(28, 28, 1),
        activation='relu'
    )
)
model.add(MaxPool2D(pool_size=(2, 2)))       

model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(10, activation='softmax'))

model.compile(
    loss='categorical_crossentropy', 
    optimizer='adam',
    metrics=['accuracy']
)

जब मैंने इस मॉडल को निम्न पंक्ति में अपने डेटा में फिट करने का प्रयास किया

model.fit(
    x_train,
    y_train_hot_encode,
    epochs=20,
    validation_data=(x_test, y_test_hot_encode),
)

मैंने लॉग में कुछ अजीब देखा

Epoch 1/20
1875/1875 [==============================] - 18s 9ms/step - loss: 0.5311 - accuracy: 0.8109 - val_loss: 0.3381 - val_accuracy: 0.8780
Epoch 2/20
1875/1875 [==============================] - 19s 10ms/step - loss: 0.2858 - accuracy: 0.8948 - val_loss: 0.2820 - val_accuracy: 0.8973
Epoch 3/20
1875/1875 [==============================] - 18s 9ms/step - loss: 0.2345 - accuracy: 0.9150 - val_loss: 0.2732 - val_accuracy: 0.9001
Epoch 4/20
1875/1875 [==============================] - 18s 9ms/step - loss: 0.2016 - accuracy: 0.9247 - val_loss: 0.2549 - val_accuracy: 0.9077
Epoch 5/20
1875/1875 [==============================] - 17s 9ms/step - loss: 0.1644 - accuracy: 0.9393 - val_loss: 0.2570 - val_accuracy: 0.9077
Epoch 6/20
1875/1875 [==============================] - 17s 9ms/step - loss: 0.1434 - accuracy: 0.9466 - val_loss: 0.2652 - val_accuracy: 0.9119
Epoch 7/20
1875/1875 [==============================] - 17s 9ms/step - loss: 0.1225 - accuracy: 0.9553 - val_loss: 0.2638 - val_accuracy: 0.9135

जैसा कि आप देख सकते हैं, प्रत्येक युग को 1875 छवियों पर प्रशिक्षित किया गया था, न कि संपूर्ण 60K छवियों पर, ऐसा क्यों है? या मैं गलत तरीके से लॉग पढ़ रहा हूँ?

1
Yedidya kfir 5 सितंबर 2021, 19:58

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि वहां दिखाई गई संख्या प्रशिक्षित उदाहरणों की संख्या के बजाय चरणों की संख्या है। चूंकि आपने batch_size को model.fit() में आपूर्ति नहीं की, इसने डिफ़ॉल्ट बैच आकार 32 का उपयोग किया।

प्रति युग चरणों की अपेक्षित संख्या ceil(60000/32) = 1875 है, जो लॉग में दिखाए गए चरणों के अनुरूप है।

2
Laplace Ricky 5 सितंबर 2021, 20:25
मुझे लगता है कि आपका मतलब युगों की संख्या के बजाय चरणों की संख्या था।
 – 
Frightera
5 सितंबर 2021, 20:21