es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué la precisión es diferente en mi PC en comparación con Kaggle cuando utilizo el mismo código?

Estoy escribiendo un algoritmo de detección de marca de agua, y he probado un código de Kaggle que ajusta finamente una ResNet, pero cuando ejecuto el mismo código en Jupyter notebook, obtengo un 50% de precisión cuando el código de ejemplo en Kaggle tiene alrededor del 97% de precisión. No tengo una GPU instalada en mi PC, y cambié el tamaño del lote a 32. ¿Sabes por qué obtengo una precisión 40% más baja?

Mi código:

import tensorflow as tf
import numpy as numpy
import os
from pathlib import Path
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
from PIL import Image

basedir = "/home/mahsa/Kaggle/archive/wm-nowm"

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

traindir = os.path.join(basedir, 'train') # raíz para entrenamiento
validdir = os.path.join(basedir, 'valid') # raíz para pruebas

traingenerator = ImageDataGenerator(rescale=1./255)
validgenerator = ImageDataGenerator(rescale=1./255)

train_data = traingenerator.flow_from_directory(traindir, target_size=(150,150), batch_size=100, class_mode="binary")
valid_data = validgenerator.flow_from_directory(validdir, target_size=(150,150), batch_size=100, class_mode="binary")

existing = tf.keras.applications.InceptionResNetV2(input_shape=(150, 150, 3), include_top=False, pooling='max', weights='imagenet')

for layer in existing.layers:
    layer.trainable = False

existing.summary()

last = existing.get_layer("mixed7a")
last_output = last.output

# Aplana la capa de salida a 1 dimensión
x = tf.keras.layers.Flatten()(last_output)
x = tf.keras.layers.Dropout(0.25)(x)

# Agrega una capa completamente conectada con 1,024 unidades ocultas y activación ReLU
x = tf.keras.layers.Dense(128, activation='relu')(x)
x = tf.keras.layers.Dense(64, activation='relu')(x)

# Agrega una capa sigmoide final para la clasificación
x = tf.keras.layers.Dense(1, activation='sigmoid')(x)

model = tf.keras.Model(existing.input, x)

model.compile(optimizer=RMSprop(lr=0.001),
              loss='binary_crossentropy',
              metrics=['accuracy'])

history = model.fit(train_data,
                    validation_data=valid_data,
                    steps_per_epoch=150,
                    epochs=60,
                    validation_steps=50,
                    verbose=2)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Puede haber varias razones para la menor precisión del algoritmo de detección de marca de agua. La ausencia de una GPU podría ser una de las razones, ya que entrenar modelos de aprendizaje profundo sin una GPU suele ser más lento y menos preciso. Además, modificar el tamaño del lote también puede afectar el rendimiento del modelo, ya que un tamaño de lote más grande puede conducir a una convergencia más rápida pero puede resultar en una precisión reducida.

    También es posible que el código de Kaggle se haya entrenado en un conjunto de datos diferente o se hayan utilizado diferentes hiperparámetros que los proporcionados en el código anterior, lo que puede haber contribuido a su mayor precisión. Para mejorar la precisión del modelo, se podría intentar entrenarlo en un conjunto de datos más grande, ajustar la tasa de aprendizaje, experimentar con diferentes arquitecturas o utilizar transfer learning.

Comments are closed.