Я работаю над моделью классификации гистопатологических изображений рака молочной железы с использованием Kaggle. Набор данных состоит из 157 572 изображений (78 786 отрицательных IDC и 78 786 положительных IDC), каждое размером 50x50 пикселей.
Я использую ResNet50 в качестве базовой модели и пытаюсь сохраните и позже загрузите наиболее эффективную версию обученной модели. Однако при попытке загрузить сохраненную модель возникает следующая ошибка:
# Load the model
model = load_model('/kaggle/working/resnet50_model.keras')
Layer "dense" expects 1 input(s), but it received 2 input tensors. Inputs received: [, ]
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.applications import ResNet50
from tensorflow.keras.models import load_model
# Data augmentation pipeline
data_augmentation = tf.keras.Sequential([
layers.RandomFlip("horizontal_and_vertical"),
layers.RandomRotation(0.5),
layers.RandomContrast(0.2),
layers.RandomBrightness(0.2),
layers.GaussianNoise(0.1)
])
# Preprocess function to normalize images
def preprocess(image, label):
image = tf.image.resize(image, (50, 50))
image = tf.cast(image, tf.float32) / 255.0
return image, label
# Load the dataset with validation split
train_dir = 'path/to/data'
batch_size = 64
img_height = 50
img_width = 50
validation_split = 0.2
test_split_ratio = 0.5
# Load the dataset
data_train = tf.keras.utils.image_dataset_from_directory(
train_dir,
validation_split=validation_split,
subset="training",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size
)
data_val = tf.keras.utils.image_dataset_from_directory(
train_dir,
validation_split=validation_split,
subset="validation",
seed=123,
image_size=(img_height, img_width),
batch_size=batch_size
)
# Split the validation set into validation and test sets
def split_dataset(dataset, split_ratio=0.5):
dataset_size = len(dataset)
split = int(split_ratio * dataset_size)
train_dataset = dataset.take(split)
test_dataset = dataset.skip(split)
return train_dataset, test_dataset
data_val, data_test = split_dataset(data_val, split_ratio=test_split_ratio)
# Apply preprocessing and augmentation
data_train = data_train.map(lambda x, y: (data_augmentation(x, training=True), y)).map(preprocess)
data_val = data_val.map(preprocess)
data_test = data_test.map(preprocess)
# Prefetch data for better performance
data_train = data_train.prefetch(tf.data.AUTOTUNE)
data_val = data_val.prefetch(tf.data.AUTOTUNE)
data_test = data_test.prefetch(tf.data.AUTOTUNE)
# Define the ResNet50 model
input_shape = (50, 50, 3)
base_model = ResNet50(weights='imagenet', include_top=False, input_shape=input_shape)
base_model.trainable = False
# Build the model
model = models.Sequential([
layers.Input(shape=(img_height, img_width, 3)),
base_model,
layers.GlobalAveragePooling2D(),
layers.Dense(256, activation='relu'),
layers.Dropout(0.5),
layers.Dense(1, activation='sigmoid')
])
# Compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Callbacks for early stopping and checkpointing
early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
model_checkpoint_callback = tf.keras.callbacks.ModelCheckpoint(
filepath='/kaggle/working/resnet50_model.keras',
monitor='val_loss',
mode='min',
save_best_only=True,
save_weights_only=False
)
# Train the model
model.fit(data_train, epochs=50, validation_data=data_val, callbacks=[early_stopping, model_checkpoint_callback])
# Fine-tune the model
base_model.trainable = True
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5), loss='binary_crossentropy', metrics=['accuracy'])
model.fit(data_train, epochs=50, validation_data=data_val, callbacks=[early_stopping, model_checkpoint_callback])
# Save model
model.save('/kaggle/working/resnet50_model.keras')
# Load the best fine-tuned model
model = load_model('/kaggle/working/resnet50_model.keras')
Чтобы устранить проблему, я проверил входные изображения, распечатав формы пакетов данных на этапе предварительной обработки. Вот результаты:
Данные обучения — пакет 0: Форма изображений: (64, 50, 50, 3), Форма меток: (64 ,)
Данные проверки — пакет 0: Форма изображений: (64, 50, 50, 3), Форма меток: (64,)
Данные испытаний — партия 0: форма изображений: (64, 50, 50, 3), форма этикеток: (64,)
Тестовые данные — партия 0: форма изображений: (64, 50, 50, 3), форма меток: (64,)
p>
Я ожидал, что сохраненная модель загрузится без каких-либо проблем, что позволит мне выполнять оценки и делать прогнозы с использованием обученных весов и архитектуры. .
Я работаю над моделью классификации гистопатологических изображений рака молочной железы с использованием Kaggle. Набор данных состоит из 157 572 изображений (78 786 отрицательных IDC и 78 786 положительных IDC), каждое размером 50x50 пикселей. Я использую ResNet50 в качестве базовой модели и пытаюсь сохраните и позже загрузите наиболее эффективную версию обученной модели. Однако при попытке загрузить сохраненную модель возникает следующая ошибка: [code]# Load the model model = load_model('/kaggle/working/resnet50_model.keras') Layer "dense" expects 1 input(s), but it received 2 input tensors. Inputs received: [, ] [/code] Вот мой код: [code]import tensorflow as tf from tensorflow.keras import layers, models from tensorflow.keras.applications import ResNet50 from tensorflow.keras.models import load_model
# Prefetch data for better performance data_train = data_train.prefetch(tf.data.AUTOTUNE) data_val = data_val.prefetch(tf.data.AUTOTUNE) data_test = data_test.prefetch(tf.data.AUTOTUNE)
# Define the ResNet50 model input_shape = (50, 50, 3) base_model = ResNet50(weights='imagenet', include_top=False, input_shape=input_shape) base_model.trainable = False
# Build the model model = models.Sequential([ layers.Input(shape=(img_height, img_width, 3)), base_model, layers.GlobalAveragePooling2D(), layers.Dense(256, activation='relu'), layers.Dropout(0.5), layers.Dense(1, activation='sigmoid') ])
# Compile the model model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# Callbacks for early stopping and checkpointing early_stopping = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
# Train the model model.fit(data_train, epochs=50, validation_data=data_val, callbacks=[early_stopping, model_checkpoint_callback])
# Fine-tune the model base_model.trainable = True model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5), loss='binary_crossentropy', metrics=['accuracy']) model.fit(data_train, epochs=50, validation_data=data_val, callbacks=[early_stopping, model_checkpoint_callback])
# Save model model.save('/kaggle/working/resnet50_model.keras')
# Load the best fine-tuned model model = load_model('/kaggle/working/resnet50_model.keras') [/code] Чтобы устранить проблему, я проверил входные изображения, распечатав формы пакетов данных на этапе предварительной обработки. Вот результаты: [list] [*]Данные обучения — пакет 0: Форма изображений: (64, 50, 50, 3), Форма меток: (64 ,)
[*]Данные проверки — пакет 0: Форма изображений: (64, 50, 50, 3), Форма меток: (64,)
[*]Данные испытаний — партия 0: форма изображений: (64, 50, 50, 3), форма этикеток: (64,)
[*]Тестовые данные — партия 0: форма изображений: (64, 50, 50, 3), форма меток: (64,)
[*] p>
[/list] Я ожидал, что сохраненная модель загрузится без каких-либо проблем, что позволит мне выполнять оценки и делать прогнозы с использованием обученных весов и архитектуры. .
Я пытаюсь создать свою первую нейронную сеть на основе кода, который дал мне учитель, но когда я пытаюсь подогнать сеть, я получаю следующую ошибку:
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1224 test_function...
Я работаю над проблемой многоклассной сегментации динамических временных рядов с Keras (Tensorflow версия 2.12.0), и я хотел посмотреть, что произойдет, когда я упал в плотный слой в сетевую архитектуру. Мое ожидание состоит в том, что для любой...
Я работаю над проблемой многоклассной сегментации динамических временных рядов с Keras (Tensorflow версия 2.12.0), и я хотел посмотреть, что произойдет, когда я упал в плотный слой в сетевую архитектуру. Мое ожидание состоит в том, что для любой...
Я работаю над проблемой многоклассной сегментации динамических временных рядов с Keras (Tensorflow версия 2.12.0), и я хотел посмотреть, что произойдет, когда я упал в плотный слой в сетевую архитектуру. Мое ожидание состоит в том, что для любой...