Привет, я обучил модель CNN с keras, похожую на пример модели, которую они используют на своем веб-сайте, но с немного меньшими слоями и дополнительным выпадающим слоем в конце. Функции построения модели выглядят примерно так:
" --------- Model Params ---------"
epochs = 800
image_size = (384, 256)
batch_size = 128
number_of_layers = 4
drop_out = 0.25
num_dropouts = 2
learn_rate = 0.00001
layer_sizes = [64, 128, 256, 512, 728]
class_weight = {0:1, 1:3}
image_rotation = 0.1
def make_model(input_shape, num_classes, layer_num=3, drop_out=0.25, dropouts=1):
inputs = keras.Input(shape=input_shape)
# Entry block
x = layers.Rescaling(1.0 / 255)(inputs)
x = layers.Conv2D(128, 3, strides=2, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
previous_block_activation = x # Set aside residual
layer_use = []
for i in range(layer_num): layer_use.append(layer_sizes[i])
for size in layer_use:
x = layers.Activation("relu")(x)
x = layers.SeparableConv2D(size, 3, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
x = layers.SeparableConv2D(size, 3, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.MaxPooling2D(3, strides=2, padding="same")(x)
# Project residual
residual = layers.Conv2D(size, 1, strides=2, padding="same")(
previous_block_activation
)
x = layers.add([x, residual]) # Add back residual
previous_block_activation = x # Set aside next residual
x = layers.SeparableConv2D(1024, 3, padding="same")(x)
x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x)
x = layers.GlobalAveragePooling2D()(x)
if num_classes == 2:
units = 1
else:
units = num_classes
if dropouts == 1:
x = layers.Dropout(drop_out)(x)
# We specify activation=None so as to return logits
outputs = layers.Dense(units, activation=None)(x)
elif dropouts == 2:
x = layers.Dropout(0.2)(x)
x = layers.Dense(units, activation=None)(x)
outputs = layers.Dropout(drop_out)(x)
return keras.Model(inputs, outputs)
model = make_model(input_shape=image_size + (3,), num_classes=2, layer_num=number_of_layers,
drop_out=drop_out, dropouts=num_dropouts)
model.compile(
optimizer=keras.optimizers.Adam(learning_rate=learn_rate),
loss=keras.losses.BinaryCrossentropy(from_logits=True),
metrics=[keras.metrics.BinaryAccuracy(name="acc")],
)
model.fit(
train_ds,
epochs=epochs,
callbacks=callbacks,
validation_data=val_ds,
class_weight=class_weight
)
Модель прекрасно обучается — точность проверки достигает около 97 %. А при использовании функции прогнозирования модель обычно дает разумные результаты на основе входных данных, которые я ей предоставляю. Проблема, с которой я столкнулся, заключается в том, что выходные прогнозы при использовании функции Predict_on_batch не совпадают и часто различаются на +-0,15, если повторяются с одними и теми же входными данными. В чем причина этого, разве прогнозы не должны быть идентичными для одних и тех же входных данных после обучения модели и ее использования для прогнозов?
Привет, я обучил модель CNN с keras, похожую на пример модели, которую они используют на своем веб-сайте, но с немного меньшими слоями и дополнительным выпадающим слоем в конце. Функции построения модели выглядят примерно так: [code]" --------- Model Params ---------"
# Entry block x = layers.Rescaling(1.0 / 255)(inputs) x = layers.Conv2D(128, 3, strides=2, padding="same")(x) x = layers.BatchNormalization()(x) x = layers.Activation("relu")(x)
previous_block_activation = x # Set aside residual
layer_use = [] for i in range(layer_num): layer_use.append(layer_sizes[i])
for size in layer_use: x = layers.Activation("relu")(x) x = layers.SeparableConv2D(size, 3, padding="same")(x) x = layers.BatchNormalization()(x)
x = layers.Activation("relu")(x) x = layers.SeparableConv2D(size, 3, padding="same")(x) x = layers.BatchNormalization()(x)
x = layers.MaxPooling2D(3, strides=2, padding="same")(x)
# Project residual residual = layers.Conv2D(size, 1, strides=2, padding="same")( previous_block_activation ) x = layers.add([x, residual]) # Add back residual previous_block_activation = x # Set aside next residual
x = layers.SeparableConv2D(1024, 3, padding="same")(x) x = layers.BatchNormalization()(x) x = layers.Activation("relu")(x)
x = layers.GlobalAveragePooling2D()(x) if num_classes == 2: units = 1 else: units = num_classes
if dropouts == 1: x = layers.Dropout(drop_out)(x) # We specify activation=None so as to return logits outputs = layers.Dense(units, activation=None)(x) elif dropouts == 2: x = layers.Dropout(0.2)(x) x = layers.Dense(units, activation=None)(x) outputs = layers.Dropout(drop_out)(x)
return keras.Model(inputs, outputs)
model = make_model(input_shape=image_size + (3,), num_classes=2, layer_num=number_of_layers, drop_out=drop_out, dropouts=num_dropouts)
model.fit( train_ds, epochs=epochs, callbacks=callbacks, validation_data=val_ds, class_weight=class_weight ) [/code] Модель прекрасно обучается — точность проверки достигает около 97 %. А при использовании функции прогнозирования модель обычно дает разумные результаты на основе входных данных, которые я ей предоставляю. Проблема, с которой я столкнулся, заключается в том, что выходные прогнозы при использовании функции Predict_on_batch не совпадают и часто различаются на +-0,15, если повторяются с одними и теми же входными данными. В чем причина этого, разве прогнозы не должны быть идентичными для одних и тех же входных данных после обучения модели и ее использования для прогнозов?
Я впервые создаю модель CNN для классификации изображений, и я немного запутался в том, что будет формой ввода для каждого типа (1D CNN, 2D CNN, 3D CNN) и как исправить количество фильтров в слое свертки. Мои данные - 100x100x30, где 30 являются...
Я заметил значительную разницу в прогнозах модели при прогнозировании одного изображения и всего набора данных. Модель, обученная с помощью PyTorch, дает совершенно разные прогнозы для одного и того же изображения при индивидуальной обработке и при...
Я заметил значительную разницу в прогнозах модели при прогнозировании одного изображения и всего набора данных. Модель, обученная с помощью PyTorch, дает совершенно разные прогнозы для одного и того же изображения при индивидуальной обработке и при...
Я пытаюсь использовать keras-nlp с предварительно обученной моделью BERT в маске, чтобы предсказать некоторые токены в последовательности. Однако модель дает противоречивые результаты. Что может быть не так или я чего-то не понимаю?
import keras...
Я строю модель Keras, основанную на MobilEnetv2 для прогнозирования 6 человеческих компетенций. Каждая выходная головка представляет компетентность и представляет собой Softmax более 100 классов (баллы 0–99). Модель принимает 224x224 рамки RGB,...