Вопрос о фильтрации ответов predict нейронной сети
я только начал изучать создание нейронных сетей. Задача у меня не очень сложная, но я пока не могу понять как фильтровать ответы predict. Получается ситуация такая. Есть большой поток данных, данные всегда отличается и мне нужно, чтоб мой модуль сигнализировал в определенных ситуациях. Как пример могу привести с картинками. Допустим у меня идет постоянный поток разных картинок, но мне нужно знать когда на картинке будет "Кот" или "Собака". Я беру все данные из них выделяю только "котов" и "собак", обучаю нейронную сеть. Она показывает очень хорошие результаты и реально понимает когда "кот", а когда "собака". Но совсем не могу понять, как сделать это в общем потоке данных. Так я создаю данные для обучения, где в trainY - это "Кот", а где 2 это "Собака".
ss = all_data[stolbi][i:i + st].values
ss = ss.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
ss = scaler.fit_transform(ss)
trainX.append(ss[:-1])
trainY.append(1)
ss = all_data[stolbi][i:i + st].values
ss = ss.astype('float32')
scaler = MinMaxScaler(feature_range=(0, 1))
ss = scaler.fit_transform(ss)
trainX.append(ss[:-1])
trainY.append(2)
Так получается делаю саму нейронную сеть.
trainX, trainY = np.array(trainX,dtype=float), np.array(trainY,dtype=float)
model = tf.keras.Sequential([
tf.keras.layers.Flatten(input_shape=(20, 7)),
tf.keras.layers.Dense(128, activation="relu"),
tf.keras.layers.Dense(128, activation="relu"),
tf.keras.layers.Dense(3, activation="softmax")
])
model.compile(optimizer=tf.keras.optimizers.SGD(), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
Так обучаю свою сеть.
model.fit(trainX[:8000], trainY[:8000], epochs=500)
Следующим образом проверяю, обучилась она или нет!
scores = model.evaluate(trainX[8000:], trainY[8000:], verbose=0)
print("Accuracy: %.2f%%" % (scores[1]*100))
Получаю ответ "Accuracy: 91.44%". Могу сделать вывод, что обучилась. Но вот в чем проблема, когда начинаю применять predictions = model.predict(trainX) и смотрю ответ print(predictions[i], np.argmax(predictions[i])) из общего потока данных, сеть просто начинает угадывает и получается очень не точные результаты. Так как всегда разные данные, а я обучил сеть только на 2 ситуации. Возможно ли как-то фильтровать ответ predict на сколько процентов ответ подходит "Кот" или "Собака". Или как делают обычно в другой ситуации. Подскажите, кто знает.
После обучения сети, прогоняю результаты и получаю ответы, таким образом
predictions = model.predict(trainX)
for i in range(0, 50):
print(predictions[i], 'Ответ argmax - ',np.argmax(predictions[i]), 'Ответ max - ', np.max(predictions[i]))
Ответы следующие:
[1.2624543e-10 1.6849281e-11 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[1.9471431e-06 3.5094148e-03 9.9648869e-01] Ответ argmax - 2 Ответ max - 0.9964887
[1.6211327e-08 3.6299360e-07 9.9999964e-01] Ответ argmax - 2 Ответ max - 0.99999964
[1.4368985e-07 2.2606137e-04 9.9977380e-01] Ответ argmax - 2 Ответ max - 0.9997738
[5.1046833e-09 1.8409909e-07 9.9999976e-01] Ответ argmax - 2 Ответ max - 0.99999976
[2.0491496e-14 1.5830024e-16 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[2.1012306e-07 8.0109909e-05 9.9991965e-01] Ответ argmax - 2 Ответ max - 0.99991965
[3.0428904e-12 2.2426488e-14 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[3.3239052e-17 6.6054896e-23 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[1.6243892e-12 8.9334837e-14 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[4.5796266e-12 1.0886907e-12 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[1.0647637e-09 1.9137612e-08 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[2.9620867e-05 9.7104661e-02 9.0286577e-01] Ответ argmax - 2 Ответ max - 0.90286577
[2.3540236e-09 6.8818601e-10 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[9.2860353e-07 1.8440984e-02 9.8155802e-01] Ответ argmax - 2 Ответ max - 0.981558
[6.8139167e-07 5.1715113e-03 9.9482781e-01] Ответ argmax - 2 Ответ max - 0.9948278
[9.5578234e-06 9.9765176e-01 2.3387526e-03] Ответ argmax - 1 Ответ max - 0.99765176
[2.6310818e-09 1.0000000e+00 7.2257832e-11] Ответ argmax - 1 Ответ max - 1.0
[1.1993447e-09 1.0000000e+00 1.8190941e-12] Ответ argmax - 1 Ответ max - 1.0
[8.6798357e-16 1.5843102e-20 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[1.9416631e-09 1.0956527e-08 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[8.465902e-09 7.820101e-08 9.999999e-01] Ответ argmax - 2 Ответ max - 0.9999999
[6.3422358e-14 2.3495776e-17 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[2.2600098e-14 5.2746145e-17 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[2.0947409e-06 2.0485567e-03 9.9794942e-01] Ответ argmax - 2 Ответ max - 0.9979494
[4.3731666e-10 2.8712496e-10 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[9.9947371e-08 9.9999213e-01 7.6921242e-06] Ответ argmax - 1 Ответ max - 0.99999213
[2.1266386e-09 1.0000000e+00 4.0922793e-10] Ответ argmax - 1 Ответ max - 1.0
[1.1883606e-08 1.0000000e+00 3.1903397e-08] Ответ argmax - 1 Ответ max - 1.0
[2.1133877e-09 2.4694119e-08 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[3.9625545e-10 1.0000000e+00 3.3284962e-11] Ответ argmax - 1 Ответ max - 1.0
[3.8005826e-08 9.9999905e-01 9.8226053e-07] Ответ argmax - 1 Ответ max - 0.99999905
[7.2263344e-07 9.9977010e-01 2.2916282e-04] Ответ argmax - 1 Ответ max - 0.9997701
[1.2742964e-06 1.1944104e-02 9.8805457e-01] Ответ argmax - 2 Ответ max - 0.9880546
[1.2056266e-09 9.7106152e-08 9.9999988e-01] Ответ argmax - 2 Ответ max - 0.9999999
[3.5110156e-07 7.3760544e-04 9.9926203e-01] Ответ argmax - 2 Ответ max - 0.99926203
[3.0334377e-09 2.6282841e-08 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[9.3430590e-06 2.2806732e-02 9.7718394e-01] Ответ argmax - 2 Ответ max - 0.97718394
[6.325649e-07 9.993024e-01 6.970602e-04] Ответ argmax - 1 Ответ max - 0.9993024
Все эти ответы верные, далее привожу пример не верных ответов.
[1.2624543e-10 1.6849281e-11 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[1.9471431e-06 3.5094148e-03 9.9648869e-01] Ответ argmax - 2 Ответ max - 1.0
[1.6211327e-08 3.6299360e-07 9.9999964e-01] Ответ argmax - 2 Ответ max - 0.9999993
[1.4368985e-07 2.2606137e-04 9.9977380e-01] Ответ argmax - 1 Ответ max - 0.9607004
[5.1046833e-09 1.8409909e-07 9.9999976e-01] Ответ argmax - 2 Ответ max - 0.99984765
[2.0491496e-14 1.5830024e-16 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[2.1012306e-07 8.0109909e-05 9.9991965e-01] Ответ argmax - 1 Ответ max - 0.99968433
[3.0428904e-12 2.2426488e-14 1.0000000e+00] Ответ argmax - 2 Ответ max - 0.55856305
[3.3239052e-17 6.6054896e-23 1.0000000e+00] Ответ argmax - 1 Ответ max - 0.97514933
[1.6243892e-12 8.9334837e-14 1.0000000e+00] Ответ argmax - 1 Ответ max - 0.6077978
[4.5796266e-12 1.0886907e-12 1.0000000e+00] Ответ argmax - 1 Ответ max - 0.9995239
[1.0647637e-09 1.9137612e-08 1.0000000e+00] Ответ argmax - 1 Ответ max - 0.9673582
[2.9620867e-05 9.7104661e-02 9.0286577e-01] Ответ argmax - 2 Ответ max - 0.999033
[2.3540236e-09 6.8818601e-10 1.0000000e+00] Ответ argmax - 2 Ответ max - 0.82355165
[9.2860353e-07 1.8440984e-02 9.8155802e-01] Ответ argmax - 2 Ответ max - 0.9938246
[6.8139167e-07 5.1715113e-03 9.9482781e-01] Ответ argmax - 1 Ответ max - 0.9946024
[9.5578234e-06 9.9765176e-01 2.3387526e-03] Ответ argmax - 1 Ответ max - 0.999997
[2.6310818e-09 1.0000000e+00 7.2257832e-11] Ответ argmax - 2 Ответ max - 0.99988914
[1.1993447e-09 1.0000000e+00 1.8190941e-12] Ответ argmax - 1 Ответ max - 0.9982153
[8.6798357e-16 1.5843102e-20 1.0000000e+00] Ответ argmax - 2 Ответ max - 0.91968423
[1.9416631e-09 1.0956527e-08 1.0000000e+00] Ответ argmax - 2 Ответ max - 1.0
[8.465902e-09 7.820101e-08 9.999999e-01] Ответ argmax - 1 Ответ max - 0.99999964
[6.3422358e-14 2.3495776e-17 1.0000000e+00] Ответ argmax - 2 Ответ max - 0.9999584
[2.2600098e-14 5.2746145e-17 1.0000000e+00] Ответ argmax - 1 Ответ max - 0.9969971
[2.0947409e-06 2.0485567e-03 9.9794942e-01] Ответ argmax - 2 Ответ max - 0.9171411
[4.3731666e-10 2.8712496e-10 1.0000000e+00] Ответ argmax - 2 Ответ max - 0.9999982
[9.9947371e-08 9.9999213e-01 7.6921242e-06] Ответ argmax - 2 Ответ max - 0.9999968
[2.1266386e-09 1.0000000e+00 4.0922793e-10] Ответ argmax - 2 Ответ max - 0.99964106
[1.1883606e-08 1.0000000e+00 3.1903397e-08] Ответ argmax - 2 Ответ max - 0.99998665
[2.1133877e-09 2.4694119e-08 1.0000000e+00] Ответ argmax - 2 Ответ max - 0.96462893
[3.9625545e-10 1.0000000e+00 3.3284962e-11] Ответ argmax - 2 Ответ max - 0.9996921
[3.8005826e-08 9.9999905e-01 9.8226053e-07] Ответ argmax - 2 Ответ max - 0.99976724
[7.2263344e-07 9.9977010e-01 2.2916282e-04] Ответ argmax - 1 Ответ max - 0.99853265
[1.2742964e-06 1.1944104e-02 9.8805457e-01] Ответ argmax - 2 Ответ max - 0.8137158
[1.2056266e-09 9.7106152e-08 9.9999988e-01] Ответ argmax - 2 Ответ max - 1.0
[3.5110156e-07 7.3760544e-04 9.9926203e-01] Ответ argmax - 2 Ответ max - 0.99971277
[3.0334377e-09 2.6282841e-08 1.0000000e+00] Ответ argmax - 2 Ответ max - 0.9999957
[9.3430590e-06 2.2806732e-02 9.7718394e-01] Ответ argmax - 2 Ответ max - 0.9999987
[6.325649e-07 9.993024e-01 6.970602e-04] Ответ argmax - 2 Ответ max - 1.0