У меня есть код 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))
Для получения Точности, потерь и точности для каждого класса из матрицы путаницы, я использовал приведенный выше код.