Python 使用Keras的深Q网络的神经网络输入和输出形状

Python 使用Keras的深Q网络的神经网络输入和输出形状,python,keras,neural-network,knapsack-problem,dqn,Python,Keras,Neural Network,Knapsack Problem,Dqn,对于学校作业,我必须使用深度Q网络解决201个项目的有界背包问题,确切地说是“或健身房”中的“背包-v2”。第一步是创建一个神经网络,在深度Q网络算法中使用两次,即所谓的Q网络和目标Q网络 Q网络必须将问题的当前状态作为其输入,即背包信息,如下所示: 数组([[项目权重],[项目值],[项目限制]]) 数组的第三部分在我每次执行步骤时都会更新,因此当我“选择一个项目”时,限制将减少1 在输入这个数组之后,神经网络必须吐出执行某个动作所需的Q值(因此选择一个项目),此后,必须发生许多其他事情,但这

对于学校作业,我必须使用深度Q网络解决201个项目的有界背包问题,确切地说是“或健身房”中的“背包-v2”。第一步是创建一个神经网络,在深度Q网络算法中使用两次,即所谓的Q网络和目标Q网络

Q网络必须将问题的当前状态作为其输入,即背包信息,如下所示: 数组([[项目权重],[项目值],[项目限制]])

数组的第三部分在我每次执行步骤时都会更新,因此当我“选择一个项目”时,限制将减少1

在输入这个数组之后,神经网络必须吐出执行某个动作所需的Q值(因此选择一个项目),此后,必须发生许多其他事情,但这超出了目前的范围

问题在于我的输入和输出的维度规范,我想在给定状态数组的情况下进行预测,得到201个值的输出,我的Q值

这是我当前的网络(以及一些测试其输出的代码):

我尝试了几种输入和输出形状,但没有一种能满足我的需要

预期产出示例:

[0, 1, 2, ........., 198, 199, 200]
env = or_gym.make("Knapsack-v2")
env.mask = False
state_space = env.reset() #array of the choosable items --> item- weights, values, limits
action_space = env.action_space.n #max 200 weight

def NN_model():
    learning_rate = 0.001
    init = tf.keras.initializers.HeUniform()
    model = keras.Sequential()
    model.add(keras.layers.Dense(48, input_shape = (201,), activation='relu', kernel_initializer=init))
    model.add(keras.layers.Dense(96, activation='relu', kernel_initializer=init))
    model.add(keras.layers.Dense(201, activation='linear', kernel_regularizer=init))
    model.compile(loss=tf.keras.losses.Huber(), optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate), metrics=['accuracy'])
    return model

model = NN_model()

all_actions = model.predict(state_space, verbose=0)
max_index = np.where(all_actions==np.amax(all_actions))
listOfCordinates = list(zip(max_index[0], max_index[1]))
for cord in listOfCordinates:
    cord
action=cord[0]
[0, 1, 2, ........., 198, 199, 200]