ValueError: Ошибка при проверке ввода: ожидалось, что input_1 будет иметь форму (28, 1, 1), но получил массив с формой (1, 1, 1) - PullRequest
0 голосов
/ 28 апреля 2019

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

Попытка изменить выходной сигнал автоэнкодера так, чтобы он был точно таким же, как и входной сигнал с помощью выравнивания, узкого места и изменения формы. Также попытался изменить размерность ввода, та же ошибка.

Название спортивного зала: RoboschoolAnt-v1

код установки автокодера:

rew = fitandgetloss(curious_autoencoder,
                    add_batch(old_obs, 4, False),
                    add_batch(obs, 4, False),
                    rew)           

Код fitandgetloss():

def fitandgetloss(compiled_ae, state1, state2, rew=0.0):
    his = compiled_ae.fit(state1, state2)
    rew += his.history['loss'][-1]
    return rew

Код add_batch():

# Adds batch dimension (or one extra dimension) so that the autoencoder below
# can interpret the data.
def add_batch(arr, ndim, thing):
    if debug:
        print(arr.shape)
    arr_shape = (1,) * (ndim - arr.ndim)
    if thing:
        arr_shape += arr.shape
        arr.shape = arr_shape
    else:
        arr.shape += arr_shape
    if debug:
        print(arr.shape)
    return arr

код автоэнкодера:

def build_network(input_shape):
    input_input = Input(shape=input_shape)
    x = input_input
    shape_one = K.int_shape(x)
    for i in range(3):
        x = Conv2D(filters=n_filt,
                   kernel_size=k_size,
                   strides=2,
                   activation='relu',
                   padding='same')(x)
    x = Flatten()(x)
    x = Dense(256)(x)
    x = Dense(shape_one[1] * shape_one[2] * shape_one[3])(x)
    output = Reshape((shape_one[1], shape_one[2], shape_one[3]))(x)
    #output = Conv2D(1, 1, 2)(x)
    autoencoder = Model(input_input, output)
    autoencoder.summary()
    return autoencoder

Полный возврат:

Traceback (most recent call last):
  File "tensorforcedemo.py", line 110, in <module>
    rew)
  File "/home/ai/expeditionRL/examples/expedition.py", line 29, in curiosity
    his = compiled_ae.fit(state1, state2)
  File "/home/ai/anaconda3/envs/drl/lib/python3.6/site-packages/keras/engine/training.py", line 952, in fit
    batch_size=batch_size)
  File "/home/ai/anaconda3/envs/drl/lib/python3.6/site-packages/keras/engine/training.py", line 751, in _standardize_user_data
    exception_prefix='input')
  File "/home/ai/anaconda3/envs/drl/lib/python3.6/site-packages/keras/engine/training_utils.py", line 138, in standardize_input_data
    str(data_shape))
ValueError: Error when checking input: expected input_1 to have shape (28, 1, 1) but got array with shape (1, 1, 1)
...