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.

Resultado de predicción de regresión de imagen de CNN

importar numpy como np
importar pandas como pd
de la ruta import Path
import os.path

desde sklearn.model_selection importar train_test_split

import tensorflow como tf

desde sklearn.metrics importar r2_score

desde keras.applications.efficientnet importar EfficientNetB3
import gc
desde keras.models import Sequential
desde keras import layers, modelos

desde keras importar Input
desde keras.models importar Model
desde keras.preprocessing.image import ImageDataGenerator
desde keras importar optimizers, initializers, regularizers, metrics
desde keras.callbacks import ModelCheckpoint
importar os
desde glob importar glob
desde PIL importar imagen
importar matplotlib.pyplot como plt
importar numpy como np
desde tensorflow.keras import optimizers
desde keras.layers importar Conv2D,MaxPool2D,GlobalAveragePooling2D,AveragePooling2D
desde keras.layers importar Denso,Dropout,Activation,Aplanar
importar sys

Fuente del repositorio: https://github.com/qubvel/efficientnet

sys.path.append(os.path.abspath (‘../input/efficientnet/efficientnet-master/efficientnet-master/’))
desde tensorflow.keras.callbacks importar EarlyStopping, ReduceLROnPlateau

image_dir = Path (‘/ contenido / unidad MyDrive / procesado’)

filepaths = pd.Series (lista (imagen_dir.glob (r ‘** / * .jpg’)), name = ‘Filepath’).astype (str)

TS = pd.Series (ordenado ([int (l.split (‘TS_’) [1].split (‘/ pre’) [0]) para l en filepaths]), name = ‘TS’). astype (np.int)
imágenes = pd.concat ([filepaths, TS], axis = 1). muestra (frac = 1.0, aleatoria_estado = 1) .reset_index (drop = True)

image_df = imágenes. muestra (2020, aleatoria_estado = 1) .reset_index (drop = True)

train_df, test_df = train_test_split (image_df, train_size = 0.7, shuffle = True, random_state = 1)

train_generator = tf.keras.preprocessing.image.ImageDataGenerator (
rescale = 1./255,
validation_split = 0.2
)

test_generator = tf.keras.preprocessing.image.ImageDataGenerator (
rescale = 1./255
)

train_input = train_generator.flow_from_dataframe (
dataframe = train_df,
x_col = ‘Filepath’,
y_col = ‘TS’,
target_size = (256, 256),
color_mode = ‘escala de grises’,
class_mode = ‘bruto’,
batch_size = 1,
shuffle = True,
semilla = 42,
subset = ‘entrenamiento’
)

val_input = train_generator.flow_from_dataframe (
dataframe = train_df,
x_col = ‘Filepath’,
y_col = ‘TS’,
target_size = (256, 256),
color_mode = ‘escala de grises’,
class_mode = ‘bruto’,
batch_size = 1,
shuffle = True,
semilla = 42,
subset = ‘validación’
)

test_input = test_generator.flow_from_dataframe (
dataframe = test_df,
x_col = ‘Filepath’,
y_col = ‘TS’,
target_size = (256, 256),
color_mode = ‘escala de grises’,
class_mode = ‘bruto’,
batch_size = 1,
shuffle = False
)

entradas = tf.keras.Input (forma = (256, 256, 1))
x = tf.keras.layers.Conv2D (filtros = 32, kernel_size = (3, 3), activation = ‘relu’) (entradas)
x = tf.keras.layers.Conv2D (filtros = 32, kernel_size = (3, 3), activation = ‘relu’) (x)
x = tf.keras.layers.MaxPool2D () (x)
x = tf.keras.layers.Conv2D (filtros = 64, kernel_size = (3, 3), activation = ‘relu’) (x)
x = tf.keras.layers.Conv2D (filtros = 64, kernel_size = (3, 3), activation = ‘relu’) (x)
x = tf.keras.layers.MaxPool2D () (x)
x = tf.keras.layers.Conv2D (filtros = 128, kernel_size = (3, 3), activation = ‘relu’) (x)
x = tf.keras.layers.Conv2D (filtros = 128, kernel_size = (3, 3), activation = ‘relu’) (x)
x = tf.keras.layers.MaxPool2D () (x)
x = tf.keras.layers.Flatten () (x)
x = tf.keras.layers.Dense (128, inicializador_kernel = ‘he_normal’) (x)
x = tf.keras.layers.Dense (64, inicializador_kernel = ‘he_normal’) (x)

salidas = tf.keras.layers.Dense (1, activation = ‘lineal’) (x)

modelo = tf.keras.Model (entradas = entradas, salidas = salidas)

modelo. compile (
optimizador = ‘adam’,
pérdida = ‘mae’
)

history = model.fit (
train_input,
validation_data = val_input,
épocas = 10,
callbacks = [
tf.keras.callbacks.EarlyStopping (
monitor = ‘val_loss’,
paciencia = 5,
restore_best_weights = True
)
]
)

#Resultados
predicted_TS = np.squeeze (modelo.predict (test_input))
true_TS = test_input.labels

rmse = np.sqrt (modelo.evaluate (test_input, verbose = 0))
print (” Test RMSE: {:.5f}”.format (rmse))

r2 = r2_score (true_TS, predicted_TS)
print (“Test R^2 Score: {:.5f}”.format (r2))

null_rmse = np.sqrt (np.sum ((true_TS – np.mean (true_TS)) ** 2) / len (true_TS))
print (“Null / Baseline Model Test RMSE: {:.5f}”.format (null_rmse))

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código anterior está construyendo un modelo de regresión para predecir la resistencia a la tracción de una aleación basada en imágenes de su microestructura. La arquitectura del modelo incluye una serie de capas convolucionales seguidas de capas totalmente conectadas y devuelve un único valor de predicción.

    El problema de tener valores de predicción casi iguales podría deberse a algunas razones:

    1. Varianza limitada en el conjunto de datos: Si el rango de valores de resistencia a la tracción en el conjunto de datos es estrecho, el modelo puede tener dificultades para aprender una gama más amplia de valores, lo que resulta en predicciones similares.
    2. Sobreajuste: Es posible que el modelo se sobreajuste al conjunto de entrenamiento y, por lo tanto, no se generalice bien al conjunto de prueba. Esto podría abordarse mediante el uso de técnicas de regularización como la eliminación o la decaída de peso, o mediante la recopilación de más datos.
    3. Problemas con la arquitectura del modelo: La arquitectura del modelo puede no ser lo suficientemente compleja o puede ser demasiado compleja para el conjunto de datos dado, lo que lleva a un mal rendimiento. Ajustar los hiperparámetros, como el número de capas o el número de filtros en cada capa, podría abordar este problema.

    Para reducir el RMSE, algunos enfoques potenciales podrían incluir:

    1. Ingeniería de características: Puede ser útil extraer características adicionales de las imágenes para alimentar el modelo, como información de textura o forma. Esto se podría hacer mediante técnicas como la detección de bordes o el análisis de Fourier.
    2. Aumento de datos: Generar datos de entrenamiento adicionales a través de técnicas como la rotación, la translación o el volteo podría mejorar la capacidad del modelo para generalizar a nuevas muestras, y en última instancia, mejorar RMSE.
    3. Ajuste de hiperparámetros: Experimentar con diferentes hiperparámetros, como la tasa de aprendizaje, el tamaño del lote o el número de épocas, podría mejorar potencialmente el rendimiento del modelo y reducir RMSE.

Comments are closed.