Я создавал CNN размером 80 для первого скрытого слоя, 160 для остальных слоев конвоя и 128 для последнего скрытого слоя. Но я продолжаю сталкиваться с сообщением об ошибке, и я действительно не знаю, что это значит. Форма входных данных (80, 80, 1) - это то, что я передаю в нейронную сеть.
Вот код для создания CNN:
if start_model is not None:
model = load_model(start_model)
else:
def res_net_block(input_layers, conv_size, hm_filters, hm_strides):
x = Conv2D(conv_size, kernel_size=hm_filters, strides=hm_strides, activation="relu", padding="same")(input_layers)
x = BatchNormalization()(x)
x = Conv2D(conv_size, kernel_size=hm_filters, strides=hm_strides, activation=None, padding="same")(x)
x = Add()([x, input_layers]) # Creates resnet block
x = Activation("relu")(x)
return x
input = keras.Input(i_shape)
x = Conv2D(80, kernel_size=8, strides=4, activation="relu")(input)
x = BatchNormalization()(x)
for i in range(3):
x = res_net_block(x, 160, 4, 2)
x = Conv2D(160, kernel_size=4, strides=2, activation="relu")(x)
x = BatchNormalization()(x)
x = Flatten(input_shape=(np.prod(window_size), 1, 1))(x)
x = Dense(128, activation="relu")(x)
output = Dense(action_space_size, activation="linear")(x)
model = keras.Model(input, output)
model.compile(optimizer=Adam(lr=0.01), loss="mse", metrics=["accuracy"])
Кстати, сообщение об ошибке находится в x = Add()([x, input_layers])
в коде