как вставить данные в nn и проблема изменения формы массива в тензор - PullRequest
0 голосов
/ 15 октября 2019

Я пытаюсь написать программу для игры, похожей на игры Atari. подробности об этом:

В этой игре объекты падают под разными углами и направлениями, и цель агента - перехватить их, используя поток. каждое состояние состоит из обратной связи, предоставляемой средой после каждого действия. обратная связь состоит из угла потока, местоположения объекта, местоположения перехвата и общего балла. Есть четыре возможных действия для выбора агента.

Я решил попробовать и реализовать программу, используя Q-глубокое обучение, расчеты потерь и градиентного спуска. Я использую tenorflow с Python 3.6.7

У меня есть эта проблема:

C:\Users\elinor\AppData\Local\Programs\Python\Python36\python.exe C:/Users/elinor/Desktop/Intrcpt/ddqn.py
2019-10-15 13:14:15.946083: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 30, 30, 32)        896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 15, 15, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 13, 13, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 4, 4, 64)          36928     
_________________________________________________________________
flatten (Flatten)            (None, 1024)              0         
_________________________________________________________________
dense (Dense)                (None, 64)                65600     
_________________________________________________________________
dense_1 (Dense)              (None, 10)                650       
=================================================================
Total params: 122,570
Trainable params: 122,570
Non-trainable params: 0
_________________________________________________________________
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_3 (Conv2D)            (None, 30, 30, 32)        896       
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 15, 15, 32)        0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 13, 13, 64)        18496     
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 6, 6, 64)          0         
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 4, 4, 64)          36928     
_________________________________________________________________
flatten_1 (Flatten)          (None, 1024)              0         
_________________________________________________________________
dense_2 (Dense)              (None, 64)                65600     
_________________________________________________________________
dense_3 (Dense)              (None, 10)                650       
=================================================================
Total params: 122,570
Trainable params: 122,570
Non-trainable params: 0
_________________________________________________________________
Traceback (most recent call last):
  File "C:/Users/elinor/Desktop/Intrcpt/ddqn.py", line 162, in <module>
    exec_process()
  File "C:/Users/elinor/Desktop/Intrcpt/ddqn.py", line 82, in exec_process
    history = network.fit(state, epochs=10, batch_size=10)
  File "C:\Users\elinor\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 728, in fit
    use_multiprocessing=use_multiprocessing)
  File "C:\Users\elinor\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 224, in fit
    distribution_strategy=strategy)
  File "C:\Users\elinor\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 547, in _process_training_inputs
    use_multiprocessing=use_multiprocessing)
  File "C:\Users\elinor\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training_v2.py", line 594, in _process_inputs
    steps=steps)
  File "C:\Users\elinor\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training.py", line 2472, in _standardize_user_data
    exception_prefix='input')
  File "C:\Users\elinor\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow_core\python\keras\engine\training_utils.py", line 574, in standardize_input_data
    str(data_shape))
ValueError: Error when checking input: expected conv2d_input to have shape (32, 32, 3) but got array with shape (1, 1, 1)

Process finished with exit code 1

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

вот проблемные части:

`state = tf.reshape(state, shape=(1,1,1,1))`

history = network.fit(state, epochs=10, batch_size=10)

, а также:

state = np.ndarray(shape=(1, 1, 1, 1), dtype=float)

вот полный код: ссылка

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

Большое спасибо за ваше время и внимание!

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