Google Colab не принимает полные данные из cifar10 - PullRequest
0 голосов
/ 10 апреля 2020
from sklearn.preprocessing import LabelBinarizer
from sklearn.metrics import classification_report

import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

from tensorflow.keras.optimizers import SGD
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import numpy as np
from tensorflow.keras.datasets import cifar10

print("[INFO] loading CIFAR-10 data")
((trainX, trainY), (testX, testY)) = cifar10.load_data()
trainX = trainX.astype("float") / 255.0
testX = testX.astype("float") / 255.0

print("trainX: {}, testX ={}".format(trainX.shape,testX.shape))

lb=LabelBinarizer()
# convert the labels from integers to vectors
trainY = lb.fit_transform(trainY)
testY = lb.transform(testY)

labelNames = ["airplane", "automobile", "bird", "cat", "deer",
"dog", "frog", "horse", "ship", "truck"]

print("[INFO] compiling model")
opt=SGD(lr=0.01, decay=0.01/40, momentum=0.9, nesterov=True)
model= MiniVGGNet.build(width=32,height=32,depth=3, classes=10)
model.compile(loss="categorical_crossentropy",
        optimizer=opt,metrics=["accuracy"])

#train the network

print("[INFO] training network..")
H=model.fit(trainX, trainY, validation_data=(testX, testY),
        batch_size=64, epochs=40, verbose=1)

Вывод:

[INFO] loading CIFAR-10 data
Downloading data from https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz
170500096/170498071 [==============================] - 4s 0us/step
trainX: (50000, 32, 32, 3), testX =(10000, 32, 32, 3)
[INFO] compiling model
[INFO] training network..
Epoch 1/40
782/782 [==============================] - 10s 12ms/step - loss: 1.6249 - accuracy: 0.4555 - val_loss: 1.3396 - val_accuracy: 0.5357
Epoch 2/40
782/782 [==============================] - 9s 12ms/step - loss: 1.1462

Когда я загружаю данные с вышеуказанного веб-сайта, я получаю правильные данные cifar, но когда я запускаю свою модель, я вижу, что она занимает всего 782 изображения , Я работал над другими моделями, но тот же результат. Это происходит только в Google Colab, а не в моем локальном p c. Что мне не хватает?

1 Ответ

1 голос
/ 11 апреля 2020

И тренировочный, и тестовый наборы работают отлично. Набор поездов содержит 50000 изображений, а набор тестов - 10000. Таким образом, в опубликованном вами коде проблем нет. Попробуйте добавить оставшуюся часть кода, который вы использовали для обучения модели. Вы можете проверить форму своих наборов, выполнив.

from tensorflow.keras.datasets import cifar10
(train_X, train_y), (test_X, test_y) = cifar10.load_data()
train_X = train_X.astype("float") / 255.0
test_X = test_X.astype("float") / 255.0

print(f"train_X: {train_X.shape}, test_X = {test_X.shape}")



perfectly fine shape of data

Обновление:

Протестировано это в MyBinder, моем местном Juyter Notebook и Colab, и пришел к такому выводу:

MyBinder и локальный Notebook не разделяли обучающий набор CIFAR на мини-партии или просто отображали общее количество отдельных точек данных в обучающем наборе. Таким образом, они показали, что 50000 шагов было необходимо в каждую эпоху.

Напротив, Google Colab мини-пакет данных CIFAR в 64 mini-batches и обучил модель. Таким образом, общее число steps в каждую эпоху составляет 5000/64, что равно 782.

Mini Batch

Надеюсь, это очистило ваше замешательство. Просто Colab отображал общее количество мини-пакетов, в то время как Jupyter Notebook отображал общее количество элементов в наборе.

PS: Вы можете добавить пропущенную скобку в конце строки 34 в коде, который вы поделился здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...