Я использую TensorFlow V1.7 с новым высокоуровневым интерфейсом Estimator. Я был в состоянии создать и обучить свою собственную сеть с моим собственным набором данных.
Однако политика, которую я использую для загрузки изображений, мне просто не подходит.
Подход, который я использовал до сих пор (во многом вдохновленный учебником MNIST), заключается в загрузке всех изображений в память с начала
(вот небольшой фрагмент кода, чтобы дать вам представление):
for filename in os.listdir(folder):
filepath = os.path.join(folder, filename)
# using OpenCV to read image
images.append(cv2.imread(filepath, cv2.IMREAD_GRAYSCALE))
labels.append(<corresponding label>)
# shuffle samples and labels in the same way
temp = list(zip(images, labels))
random.shuffle(temp)
images, labels = zip(*temp)
return images, labels
Это означает, что я должен загрузить в память весь свой тренировочный набор, содержащий что-то вроде 32 тыс. Изображений, перед тренировкой в сети.
Однако, поскольку размер моей партии равен 100, для сети не потребуется более 100 изображений одновременно.
Этот подход кажется мне довольно странным. Я понимаю, что таким образом к вторичной памяти обращаются только один раз, максимизируя производительность; однако, если мой набор данных был действительно большим, это могло бы перегрузить мою оперативную память, не так ли?
Как следствие, я хотел бы использовать ленивый подход, загружая изображения только тогда, когда они необходимы (т.е. когда они оказываются в пакете).
Как я могу это сделать? Я искал документацию TF, но пока ничего не нашел.
Есть что-то, что я пропускаю?