После тренировки моей модели точность теста всегда составляет 50%. Что не так в моем коде ниже?
0 ~ 4000 данных нормального сигнала, 4001 ~ 6000 данных аномального сигнала для двоичной классификации. размерность данных (6000, 8000)
data = np.load('data.npy')
label = []
for i in range(len(data)): ## labeling
if i < 4000:
label.append(1)
else:
label.append(0)
label = np.array(label)
## each 100 data was extracted for test
test_data = np.concatenate((data[:100], data[4001:4101]), axis=0)
test_label = np.concatenate((label[:100], label[4001:4101]), axis=0)
train_data = np.concatenate((data[100:4001], data[4101:]))
train_label = np.concatenate((label[100:4001], label[4101:]))
## data shuffleing
tmp = [[x,y]for x, y in zip(train_data, train_label)]
tmp1 = [[x,y]for x, y in zip(test_data, test_label)]
random.shuffle(tmp)
random.shuffle(tmp1)
train_data = [n[0] for n in tmp]
train_label = [n[1] for n in tmp]
train_data = np.array(train_data)
train_label = np.array(train_label)
teet_data = [n[0] for n in tmp1]
test_label = [n[1] for n in tmp1]
test_data = np.array(test_data)
test_label = np.array(test_label)
## scaling
mean = train_data.mean(axis=0)
std = train_data.std(axis=0)
train_data -= mean
train_data /= std
test_data -= mean
test_data /= std
model = models.Sequential()
model.add(layers.Dense(128, activation='relu', input_shape=(8000,)))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(32, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='Adam',
loss='binary_crossentropy',
metrics=['acc'])
history = model.fit(train_data,
train_label,
epochs=60,
batch_size=128,
shuffle=True,
validation_split=0.2)
кривая потерь
loss, acc = model.evaluate(test_data, test_label)
200/200 [=== ===========================] - 0 с 140 мкс / шаг
print(acc)
0,5