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