Seite 1 von 1

keras print accurasy

Verfasst: Donnerstag 7. November 2019, 09:24
von toper
Hallo zusammen,
ich habe ein Programm geschrieben das mit Hilfe von keras hunde und katzen unterscheidet.

Im ersten Programm wird die KI trainiert.
Im zweiten lasse ich es anhand eines Testbildes vorhersagen was es ist:

Code: Alles auswählen

import os
import numpy as np
from keras.models import Sequential
from keras.layers import Activation, Dropout, Flatten, Dense
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Convolution2D, MaxPooling2D, ZeroPadding2D
from keras import optimizers
from keras.preprocessing import image
try:
    img_width, img_height = 150, 150
    
    model = Sequential()
    model.add(Convolution2D(32, 3, 3, input_shape=(img_width, img_height,3)))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Convolution2D(32, 3, 3))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Convolution2D(64, 3, 3))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Flatten())
    model.add(Dense(64))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(1))
    model.add(Activation('sigmoid'))

    


    model.load_weights('C:/Users/Tobias_Arbeit/Desktop/test/test.h5')



    model.compile(loss='binary_crossentropy',
                  optimizer='rmsprop',
                  metrics=['accuracy'])

    


    img = image.load_img("C:/Users/Tobias_Arbeit/Desktop/79.jpg", target_size=(img_width,img_height))
    x = image.img_to_array(img)
    x = np.expand_dims(x, axis=0)

    images = np.vstack([x])
    prediction = model.predict_classes(images, batch_size=10)
    if(prediction==1):
        print("Hund")
    if(prediction==0):
        print("Katze")
    
    x = input("")

except Exception as e:
    print(e)
    x = input("ERRORRRRRRR")

Meine Frage:
Wie kann ich die genauigkeit, also accurasy, loss wert e.t.c anzeigen lassen?

Re: keras print accurasy

Verfasst: Donnerstag 7. November 2019, 12:11
von __blackjack__
@toper: Allgemeine Anmerkungen zum Quelltext: Es wird einiges importiert was überhaupt nicht verwendet wird.

Um die Bedingung bei ``if`` gehören keine Klammern und man sollte es selbst in Fällen wo man Klammern braucht, so schreiben, dass es aussieht als wäre ``if`` eine Funktion.

`x` ist ein schlechter Name und wird für verschiedene Dinge verwendet. Wobei die sinnfreien `input()`-Aufrufe und die Ausnahmebehandlung die einfach nur die Fehlersuche erschwert, da sowieso nichts zu suchen haben.

Bei der Auswertung von `prediction` sollte das zweite ``if`` ein ``elif`` sein, denn `prediction` kann ja nicht gleichzeitig 0 und 1 sein.

Zwischenstand (ungetestet):

Code: Alles auswählen

#!/usr/bin/env python3

import numpy as np
from keras.layers import (
    Activation,
    Convolution2D,
    Dense,
    Dropout,
    Flatten,
    MaxPooling2D,
)
from keras.models import Sequential
from keras.preprocessing.image import img_to_array, load_img


def main():
    image_width, image_height = 150, 150

    model = Sequential()
    model.add(
        Convolution2D(32, 3, 3, input_shape=(image_width, image_height, 3))
    )
    model.add(Activation("relu"))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Convolution2D(32, 3, 3))
    model.add(Activation("relu"))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Convolution2D(64, 3, 3))
    model.add(Activation("relu"))
    model.add(MaxPooling2D(pool_size=(2, 2)))

    model.add(Flatten())
    model.add(Dense(64))
    model.add(Activation("relu"))
    model.add(Dropout(0.5))
    model.add(Dense(1))
    model.add(Activation("sigmoid"))

    model.load_weights("C:/Users/Tobias_Arbeit/Desktop/test/test.h5")

    model.compile(
        loss="binary_crossentropy", optimizer="rmsprop", metrics=["accuracy"]
    )

    image = load_img(
        "C:/Users/Tobias_Arbeit/Desktop/79.jpg",
        target_size=(image_width, image_height),
    )
    image_data = img_to_array(image)
    image_data = np.expand_dims(image_data, axis=0)
    images = np.vstack([image_data])
    
    prediction = model.predict_classes(images, batch_size=10)
    if prediction == 1:
        print("Hund")
    elif prediction == 0:
        print("Katze")


if __name__ == "__main__":
    main()