Почему мой CNN не работает после нескольких эпох? - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть код CNN, как следовать. Когда я тренирую свою модель, у меня хороший результат, но теперь этот код не работает ни на одной системе. Со случайным начальным числом и после того, как я использовал его для стабильного вывода, это случилось.

from pathlib import Path
import glob
import cv2
import numpy as np
from keras.utils import np_utils
from keras.models import Model
from keras import layers
import keras
from sklearn.metrics import classification_report

path_spec_train = "/home/narges/dataset/first_test/spectrogram98.4.31_6S/train_6/"
spec_train = glob.glob(path_spec_train + "**/*.png") 
spec_train.sort()

X_modify = []
width = 200
height = 100
for spec in spec_train:
    specs = cv2.imread(spec)
    specs = cv2.cvtColor(specs,cv2.COLOR_BGR2GRAY)
    specs = cv2.resize(specs ,(width, height))
    specs = specs / np.max(specs)
    specs = specs.astype(np.float32)
    X_modify.append(specs)

X_train = np.asarray(X_modify,dtype=np.float32)
X_train = np.expand_dims(X_train, axis=3)


path_spec_test = "/home/narges/dataset/first_test/spectrogram98.4.31_6S/test_6/"
spec_test = glob.glob(path_spec_test + "**/*.png") 
spec_test.sort()

X_modify_t = []
width_t = 200
height_t = 100
for spec_t in spec_test:
    specs_test = cv2.imread(spec_t)
    specs_test = cv2.cvtColor(specs_test,cv2.COLOR_BGR2GRAY)
    specs_test = cv2.resize(specs_test ,(width_t, height_t))
    specs_test = specs_test / np.max(specs_test)
    specs_test = specs_test.astype(np.float32)
    X_modify_t.append(specs_test)

X_test = np.asarray(X_modify_t,dtype=np.float32)
X_test = np.expand_dims(X_test, axis=3)


label_no = [spk_ID[i].split('_')[-2] for i in range(number_of_files)]

Y_train = np_utils.to_categorical(label_no)

label_no_t = [spk_ID_t[i].split('_')[-2] for i in range(number_of_files_t)]

Y_test = np_utils.to_categorical(label_no_t)

myinput = layers.Input(shape=(100,200,1))
conv1 = layers.Conv2D(16, 3, activation='relu', padding='same', strides=2)(myinput)
conv2 = layers.Conv2D(32, 3, activation='relu', padding='same', strides=2)(conv1)
flat = layers.Flatten()(conv2)
out_layer = layers.Dense(6, activation='softmax')(flat)

mymodel = Model(myinput, out_layer)
mymodel.summary()
mymodel.compile(optimizer=keras.optimizers.Adam(), loss=keras.losses.categorical_crossentropy, metrics=['accuracy'])

network_history = mymodel.fit(X_train, Y_train, batch_size=128, epochs=20)

pred = np.round(mymodel.predict(X_test))
print(classification_report(Y_test, pred))

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...