Настройка генератора данных для изучения скрытого слоя
Долгое время скрывался, впервые постер здесь :)
Я пытаюсь создать CNN на питоне, который будет принимать в качестве входных данных изображение и выводить 25 непрерывных значений, предсказанных из указанного изображения. У меня есть каталог, содержащий подкаталоги, каждый из которых содержит изображение в формате .jpg и соответствующие 25 значений, хранящихся в формате .csv. Я делал что-то подобное в прошлом, читая свои изображения и метки в виде массивов numpy, но подумал, что было бы разумно попытаться научиться делать это с помощью генераторов данных. Пока что мой код приведен ниже, но, насколько я могу судить, он не загружает наборы меток, поскольку моя модель продолжает возвращать ошибку, указывающую на отсутствие градиента для обучения.
Я делаю все в TensorFlow, но не обязательно женат на нем. Точно так же я могу регенерировать способ хранения моих изображений и меток, поэтому, если то, как я это сделал, является проблемой, я также буду рад изменить эту структуру.
Любая помощь или предложения приветствуются!
С использованием
Конкретная ошибка, которую я возвращаю, заканчивается
ValueError: No gradients provided for any variable:
Соответствующий код, который у меня есть до сих пор:
import os, shutil, csv
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
def data_generator(data_dir, batch_size):
# Set up the data generator
datagen = ImageDataGenerator(rescale=1./255)
# Read in the data from the specified directory
generator = datagen.flow_from_directory(
data_dir,
target_size=image_size,
batch_size=batch_size,
class_mode=None, # since the labels are stored in separate .csv files
shuffle=True
)
# Iterate over the data
for data_batch, _ in generator:
# Read in the corresponding .csv file for each image
labels_batch = []
for i, filename in enumerate(data_batch):
# Get the file name without the extension
file_base = os.path.splitext(filename)[0]
# Read in the labels from the .csv file
with open(file_base + '.csv', 'r') as csv_file:
reader = csv.reader(csv_file)
labels_batch.append(next(reader))
yield data_batch, labels_batch
train_generator = data_generator(os.path.join(data_dir, 'train'), batch_size)
Немного пропуская
# Compile the model
model.compile(optimizer='adam', loss='mean_squared_error', metrics=\['accuracy'\])
# Train the model using the data generators
history = model.fit_generator(
train_generator,
steps_per_epoch=len(train_generator),
epochs=10,
validation_data=val_generator,
validation_steps=len(val_generator)
)
# Evaluate the model on the testing data
test_loss, test_acc = model.evaluate_generator(test_generator, steps=len(test_generator))