也许是深度强化学习?
我不确定,但你的实现可以解决 AND 门。我对 OR 门有其他感觉。试想一下 - 首先我们需要了解两个条件的信息,然后我们可以检查复杂的解决方案。首先,我想到了具有一个隐藏层的神经网络。听起来很完美。
我想当你检查这个 Tensorflow-Keras 代码时你会明白:
iterations = 50
model = Sequential()
model.add(Dense(16, input_shape=(None, 2), activation='relu')) # our hidden layer for OR gate problem
model.add(Dense(2, activation='sigmoid'))
model.summary()
opt = Adam(0.01)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['acc'])
# mean_squared_error categorical_crossentropy binary_crossentropy
for iteration in range(iterations):
x_train = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) # table of inputs
y_train = np.array([[1, 0], [0, 1], [0, 1], [1, 0]]) # outputs in categorical (first index is 0, second is 1)
r = np.random.randint(0, len(x_train)) # random input
r_x = x_train[r]
r_x = np.array([[r_x]])
result = model.predict(r_x)[0] # predict
best_id = np.argmax(result) # get of index of "better" output
input_vector = np.array([[x_train[r]]])
isWon = False
if (best_id == np.argmax(y_train[r])):
isWon = True # everything is good
else:
# answer is bad!
output = np.zeros((2))
output[best_id] = -1
output = np.array([[output]])
loss = model.train_on_batch(input_vector, output)
print("iteration", iteration, "; has won?", isWon)
当代理的“答案”很好时——我们不会改变任何东西(但我们可以训练网络以最佳动作为 1 以保持稳定性)。
当答案不好时,我们将动作设置为坏 - 其他动作被选择的可能性更大。
有时学习需要超过 50 次迭代,但这只是我的建议。使用隐藏层神经元计数、学习率和迭代次数。
希望能帮到你:)