Заставить модель Keras учиться на основе потерь, рассчитанных в режиме реального времени - PullRequest
0 голосов
/ 27 декабря 2018
import numpy as np
import cv2
from PIL import ImageGrab
import tensorflow as tf
import keyboard

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Conv2D(32, kernel_size=(5, 5),activation='relu',input_shape=(48, 86, 1)))
model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu'))
model.add(tf.keras.layers.MaxPooling2D(pool_size=(2, 2)))
model.add(tf.keras.layers.Dropout(0.25))
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dense(128, activation='relu'))
model.add(tf.keras.layers.Dropout(0.5))
model.add(tf.keras.layers.Dense(4, activation='softmax'))
model.compile(loss=tf.keras.losses.categorical_crossentropy,
              optimizer=tf.keras.optimizers.Adadelta(),
              metrics=['accuracy'])


def loss(x):
    return ((x[0] ** 2) + (x[1] ** 2) + (x[2] ** 2) + (x[3] ** 2)) / 2


while 1:
    scr = np.array(ImageGrab.grab(bbox=(40, 280, 900, 760)))
    cv2_scr = cv2.cvtColor(scr, cv2.COLOR_BGR2GRAY)
    cv2_scr = cv2.resize(cv2_scr, (0,0), fx=0.1, fy=0.1)
    cv2_scr = cv2.normalize(cv2_scr, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)
    cv2.imshow('display', cv2_scr)

    pred = (model.predict(cv2_scr.reshape(1,48,86,1)))[0]
    if keyboard.is_pressed('w'):
        cost = loss([1, 0, 0, 0] - pred)
    elif keyboard.is_pressed('a'):
        cost = loss([0, 1, 0, 0] - pred)
    elif keyboard.is_pressed('s'):
        cost = loss([0, 0, 1, 0] - pred)
    else:
        cost = loss([0, 0, 0, 1] - pred)
    print(cost)
    #training code here
    if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break

Я пытаюсь заставить эту модель «наблюдать» за тем, что я делаю, а затем учиться на ней.Как видите, я дошел до того, что смог рассчитать стоимость модели для каждой итерации.Как только я дошел до этой точки, мне не ясно, как выполнить градиентный спуск с этим.

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