Модель Keras Tensorflow дает одинаковый выход для разных входов - PullRequest
0 голосов
/ 29 октября 2019

Я использую TensorFlow с Keras для построения модели Deep Learning для классификации музыки по жанрам, но модель дает одинаковый результат для разных входов.

Классы жанров кодируются в индексы. Например: 0 = металл, 1 = поп, 2 = рок. Всего существует 10 классов.

Вывод всегда одинаков независимо от ввода. Например: входные данные - рок, классика, диско, поп и т. Д. Выходные данные - всегда рок.

Я снова и снова переучивал модель с нуля, сохранял и загружал модель для прогнозирования. Я изменил количество скрытых слоев, эпох (20, 30, 40, 100, 200, 500), размер партии, функции активации (relu, sigmoid). Тем не менее, я получаю один и тот же вывод для разных входов.

#----------Encoding labels---------
genre_types = data.iloc[:, -1]
encoder = LabelEncoder()
y = encoder.fit_transform(genre_types)
print(y)

#------Scaling dataset-------------
scaler = StandardScaler()
X = scaler.fit_transform(np.array(data.iloc[:, :-1], dtype=float))

#-------Dividing dataset---------
#random_state is not helping at all
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
#print(len(y_train), len(y_test))
#print(X_train[10], X_train[10].shape)

#-------Building Model-------
x_validation = X_train[:100]
partial_x_train = X_train[100:]
y_validation = y_train[:100]
partial_y_train = y_train[100:]

model = models.Sequential()
model.add(layers.Dense(512, activation='relu', input_shape=(X_train.shape[1],)))
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(partial_x_train, partial_y_train, epochs=30, batch_size=256, validation_data=(x_validation, y_validation))

results = model.evaluate(X_test, y_test)
print(results)
# I have tried saving and loading model to predict through a separate file but this didn't help
model.save('dl_model_new.h5')
print("Sucessfully saved", X[1].shape)

''' Prediction is always giving same result. Training the model again is not helping as well
prediction = model.predict(data)
print(np.argmax(prediction)

'''

Любая помощь очень ценится.

...