CNN точность по оси Y - PullRequest
       11

CNN точность по оси Y

0 голосов
/ 07 апреля 2020

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

Когда я кодирую график, я получаю диапазон по оси Y от 0 до 1. Как можно иметь диапазон от 0 до 100 с уже сохраненными значениями маринада.

from keras.models import Sequential
from keras.layers import Conv2D,Activation,MaxPooling2D,Dense,Flatten,Dropout
import numpy as np
from keras.preprocessing.image import ImageDataGenerator
from IPython.display import display
import matplotlib.pyplot as plt
from PIL import Image
from sklearn.metrics import classification_report, confusion_matrix
import keras
from keras.layers import BatchNormalization
from keras.optimizers import Adam
import pickle
from keras.models import load_model

f = open('32_With_Dropout_rl_001_1_layer', 'rb')
history = pickle.load(f)
f = open('32_With_Dropout_rl_001_2_layers', 'rb')
history1 = pickle.load(f)
f = open('32_With_Dropout_rl_001_3_layers', 'rb')
history2 = pickle.load(f)


# summarize history for accuracy
plt.plot(history['val_accuracy'])
plt.plot(history1['val_accuracy'])
plt.plot(history2['val_accuracy'])
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['CNN_1', 'CNN_2', 'CNN_3'], loc='lower right')
plt.show()
# summarize history for loss
plt.plot(history['val_loss'])
plt.plot(history1['val_loss'])
plt.plot(history2['val_loss'])
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['CNN_1', 'CNN_2', 'CNN_3'], loc='upper left')
plt.show()

enter image description here

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете умножить значение списка .ie 'val_accuracy' на 100. Код указан ниже,

val_accuracy = [i * 100 for i in history.history['val_accuracy']]
plt.plot(val_accuracy)
plt.title('Model Accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['Val Accuracy'], loc='upper left')
plt.show()

Пример модели и графика -

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Flatten, Dropout, MaxPooling2D
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import Adam

import os
import numpy as np
import matplotlib.pyplot as plt

_URL = 'https://storage.googleapis.com/mledu-datasets/cats_and_dogs_filtered.zip'

path_to_zip = tf.keras.utils.get_file('cats_and_dogs.zip', origin=_URL, extract=True)

PATH = os.path.join(os.path.dirname(path_to_zip), 'cats_and_dogs_filtered')

train_dir = os.path.join(PATH, 'train')
validation_dir = os.path.join(PATH, 'validation')

train_cats_dir = os.path.join(train_dir, 'cats')  # directory with our training cat pictures
train_dogs_dir = os.path.join(train_dir, 'dogs')  # directory with our training dog pictures
validation_cats_dir = os.path.join(validation_dir, 'cats')  # directory with our validation cat pictures
validation_dogs_dir = os.path.join(validation_dir, 'dogs')  # directory with our validation dog pictures

num_cats_tr = len(os.listdir(train_cats_dir))
num_dogs_tr = len(os.listdir(train_dogs_dir))

num_cats_val = len(os.listdir(validation_cats_dir))
num_dogs_val = len(os.listdir(validation_dogs_dir))

total_train = num_cats_tr + num_dogs_tr
total_val = num_cats_val + num_dogs_val

batch_size = 128
epochs = 15
IMG_HEIGHT = 150
IMG_WIDTH = 150

train_image_generator = ImageDataGenerator(rescale=1./255,brightness_range=[0.5,1.5]) # Generator for our training data
validation_image_generator = ImageDataGenerator(rescale=1./255,brightness_range=[0.5,1.5]) # Generator for our validation data

train_data_gen = train_image_generator.flow_from_directory(batch_size=batch_size,
                                                           directory=train_dir,
                                                           shuffle=True,
                                                           target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                           class_mode='binary')

val_data_gen = validation_image_generator.flow_from_directory(batch_size=batch_size,
                                                              directory=validation_dir,
                                                              target_size=(IMG_HEIGHT, IMG_WIDTH),
                                                              class_mode='binary')

model = Sequential([
    Conv2D(16, 3, padding='same', activation='relu', input_shape=(IMG_HEIGHT, IMG_WIDTH ,3)),
    MaxPooling2D(),
    Conv2D(32, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Conv2D(64, 3, padding='same', activation='relu'),
    MaxPooling2D(),
    Flatten(),
    Dense(512, activation='relu'),
    Dense(1)
])

model.compile(optimizer="adam", 
          loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
          metrics=['accuracy'])

history = model.fit_generator(
          train_data_gen,
          steps_per_epoch=total_train // batch_size,
          epochs=epochs,
          validation_data=val_data_gen,
          validation_steps=total_val // batch_size)

val_accuracy = [i * 100 for i in history.history['val_accuracy']]
plt.plot(val_accuracy)
plt.title('Model Accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['Val Accuracy'], loc='upper left')
plt.show()

Вывод -

Found 2000 images belonging to 2 classes.
Found 1000 images belonging to 2 classes.
Epoch 1/15
15/15 [==============================] - 11s 763ms/step - loss: 0.8592 - accuracy: 0.5036 - val_loss: 0.6932 - val_accuracy: 0.4989
Epoch 2/15
15/15 [==============================] - 12s 767ms/step - loss: 0.6926 - accuracy: 0.5021 - val_loss: 0.6927 - val_accuracy: 0.5000
Epoch 3/15
15/15 [==============================] - 11s 740ms/step - loss: 0.6908 - accuracy: 0.4989 - val_loss: 0.6830 - val_accuracy: 0.5000
Epoch 4/15
15/15 [==============================] - 11s 746ms/step - loss: 0.6752 - accuracy: 0.5235 - val_loss: 0.6534 - val_accuracy: 0.5580
Epoch 5/15
15/15 [==============================] - 11s 748ms/step - loss: 0.6401 - accuracy: 0.5865 - val_loss: 0.6111 - val_accuracy: 0.6127
Epoch 6/15
15/15 [==============================] - 11s 747ms/step - loss: 0.5673 - accuracy: 0.6779 - val_loss: 0.5867 - val_accuracy: 0.6786
Epoch 7/15
15/15 [==============================] - 11s 747ms/step - loss: 0.5347 - accuracy: 0.7196 - val_loss: 0.5962 - val_accuracy: 0.6964
Epoch 8/15
15/15 [==============================] - 11s 748ms/step - loss: 0.4618 - accuracy: 0.7879 - val_loss: 0.6002 - val_accuracy: 0.6897
Epoch 9/15
15/15 [==============================] - 11s 745ms/step - loss: 0.4271 - accuracy: 0.7906 - val_loss: 0.5649 - val_accuracy: 0.6931
Epoch 10/15
15/15 [==============================] - 11s 753ms/step - loss: 0.3839 - accuracy: 0.8125 - val_loss: 0.5892 - val_accuracy: 0.7042
Epoch 11/15
15/15 [==============================] - 11s 750ms/step - loss: 0.3151 - accuracy: 0.8558 - val_loss: 0.6658 - val_accuracy: 0.6629
Epoch 12/15
15/15 [==============================] - 11s 751ms/step - loss: 0.2736 - accuracy: 0.8686 - val_loss: 0.6635 - val_accuracy: 0.7188
Epoch 13/15
15/15 [==============================] - 11s 748ms/step - loss: 0.2423 - accuracy: 0.8868 - val_loss: 0.7478 - val_accuracy: 0.7054
Epoch 14/15
15/15 [==============================] - 11s 749ms/step - loss: 0.2192 - accuracy: 0.9092 - val_loss: 0.8924 - val_accuracy: 0.6719
Epoch 15/15
15/15 [==============================] - 11s 751ms/step - loss: 0.1754 - accuracy: 0.9215 - val_loss: 0.7900 - val_accuracy: 0.7087

Вывод графика -

enter image description here

...