не увеличивается точность нейросети на тестовом наборе

точность на тренировочном наборе нормально увеличивается, а вот на тестовом никак, использовал dropout и l2 регуляризацию - не помогло. Также менял количество слоев и нейронов в каждом, не помогает. даных для обучения больше достать не получается.введите сюда описание изображения

набор даных можно скачать по ссылке: https://drive.google.com/file/d/1WrfFHJ7SfS-d9eRuiVvq_gSDSVNgcO1p/view?usp=sharing

ниже одна из многих вариаций которую я пробовал(максимально сократил, но она рабочая, и воспроизводит проблему)

import numpy as np
import h5py
import keras
import matplotlib.pyplot as plt
import random
import os
import tensorflow as tf

def load_data(name):
    train_dataset = h5py.File('datasets/' + name + '.h5', "r")
    train_x = np.array(train_dataset["train_x"][:])
    train_y = np.array(train_dataset["train_y"][:])
    train_y = train_y.reshape((1, train_y.shape[0]))
    return train_x,train_y

def Normalize(train_x):
    max = 0
    for i in train_x:
        for j in i:
            if j > max:
                max = j
    train_x = train_x / max
    return train_x

train_x,train_y = load_data('train_data')
train_x = Normalize(train_x)
train_x = train_x.reshape(train_x.shape[0],-1)
train_y = train_y.T

seed = 13
l2_k = 0.1
dropout_k = 0.3

np.random.seed(seed)
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
tf.random.set_seed(seed)

input = keras.layers.Input(shape = train_x.shape[1])

layer1 = keras.layers.Dropout(dropout_k,seed=seed)(keras.layers.Dense(1300,activation=keras.layers.LeakyReLU(0.1), kernel_initializer=keras.initializers.TruncatedNormal(seed=seed))(input))
layer2 = keras.layers.Dropout(dropout_k,seed=seed)(keras.layers.Dense(700,activation=keras.layers.LeakyReLU(0.1), kernel_initializer=keras.initializers.TruncatedNormal(seed=seed))(layer1))
layer3 = keras.layers.Dropout(dropout_k,seed=seed)(keras.layers.Dense(300,activation=keras.layers.LeakyReLU(0.1), kernel_initializer=keras.initializers.TruncatedNormal(seed=seed))(layer2))
layer4 = keras.layers.Dropout(dropout_k,seed=seed)(keras.layers.Dense(70,activation=keras.layers.LeakyReLU(0.1), kernel_initializer=keras.initializers.TruncatedNormal(seed=seed))(layer3))

output =  keras.layers.Dropout(0,seed=seed)(keras.layers.Dense(1, activation='sigmoid', kernel_initializer=keras.initializers.TruncatedNormal(seed=seed))(layer4))

model = keras.Model(inputs=input, outputs=output)
model.compile(loss=keras.losses.BinaryCrossentropy(), optimizer=keras.optimizers.Adam(0.01), metrics=[keras.metrics.BinaryAccuracy()])
hist = model.fit(train_x, train_y, epochs=30,validation_split = 0.2, batch_size=256)

plt.plot(hist.history['binary_accuracy'], label = 'train accuracy')
plt.plot(hist.history['val_binary_accuracy'], label = 'test accuracy')
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.legend()
plt.show()

Ответы (0 шт):