我有 8000 张黑色背景的圆圈图像。每个标签都是圆的 x 坐标。每个图像的大小为 (128,128,3)。我的训练损失从 2000 开始,到 10 结束,而验证损失保持在 200 左右。此外,我通过将每个图像除以 255 对其进行标准化。
images_array 的形状:(8000,128,128,3) y 是形状:(8000,1)
这是我的代码:
from sklearn.model_selection import train_test_split
X_train, X_temp, y_train, y_temp = train_test_split(images_array, y, test_size=0.2, random_state=42)
X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, test_size=0.5, random_state=42)
import tensorflow as tf
X_train = tf.convert_to_tensor(X_train)
y_train = tf.convert_to_tensor(y_train)
from tensorflow import keras
from tensorflow.keras import layers, Model
from tensorflow.keras.models import Sequential
inputs = keras.Input(shape=(128, 128, 3))
# Define the layers
x = layers.Conv2D(8, 3, activation='relu')(inputs)
x = layers.MaxPooling2D(2)(x)
x = layers.Conv2D(16, 3, activation='relu')(x)
x = layers.MaxPooling2D(2)(x)
x=layers.Flatten()(x)
x = layers.Dense(128, activation='relu')(x)
output_x = layers.Dense(1, activation = 'linear', name = "y1_output")(x)
model = Model(inputs = inputs, outputs = output_x)
model.summary()
我可以做什么来显着改善我的损失?
我尝试了不同的激活函数和不同的优化器。
您可以首先检查您的模型是否过度拟合。训练损失明显低于验证损失。您可以通过绘制模型训练期间每个时期的训练和验证损失的演变来做到这一点。如果是这种情况,您可以使用 dropout、L2 正则化或批量归一化等技术来防止过度拟合。
否则,你可以尝试不同的方法来改善验证损失:
ImageDataGenerator
的示例:datagen = ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True
)
datagen.flow(X_train, y_train, batch_size=32)