Я пытаюсь тренировать DQN, чтобы играть в Tic-Tac-Toe. Я тренировал его, чтобы играть в X (в то время как O движется случайным образом). После 12 часов обучения он играет хорошо, но не безупречно. Теперь я хочу тренировать две сети одновременно - одну для X-движений и одну для O-движений. Но когда я пытаюсь сделать model.predict (состояние) на второй сети, я получаю ошибки как:Как использовать две сети в TFlearn?
ValueError: Cannot feed value of shape (9,) for Tensor 'InputData/X:0', which has shape '(?, 9)'
Но я знаю, что Shure сетевые определения и размеры данных идентичны. Есть что-то с определением двух DNN.
Вот общий пример:
import tflearn
import random
X = [[random.random(),random.random()] for x in range(1000)]
#reverse values order like [1,0] -> [0,1]
Y = [[x[1],x[0]] for x in X]
n = tflearn.input_data(shape=[None,2])
n = tflearn.fully_connected(n, 2)
n = tflearn.regression(n)
m = tflearn.DNN(n)
m.fit(X, Y, n_epoch = 20)
#should print like [0.1,0.9]
print(m.predict([[0.9,0.1]]))
n2 = tflearn.input_data(shape=[None,2])
n2 = tflearn.fully_connected(n2, 2)
n2 = tflearn.regression(n2)
m2 = tflearn.DNN(n2)
# set second element value to first e.g. [1,0] -> [1,1]
Y = [[x[0],x[0]] for x in X]
m2.fit(X, Y, n_epoch = 20)
#should print like [0.9,0.9]
print(m2.predict([[0.9,0.1]]))
Ошибка будет как:
Traceback (most recent call last):
File "2_dnn_test.py", line 25, in <module>
m2.fit(X, Y, n_epoch = 20)
File "/home/cpro/.pyenv/versions/3.5.1/lib/python3.5/site-packages/tflearn/models/dnn.py", line 157, in fit
self.targets)
File "/home/cpro/.pyenv/versions/3.5.1/lib/python3.5/site-packages/tflearn/utils.py", line 267, in feed_dict_builder
feed_dict[net_inputs[i]] = x
IndexError: list index out of range
Ошибка отличается тем, что в моем крестики-нолики я называю предсказать на второй DNN раньше, чем делать первые поместиться(). Если я закомментировать m2.fit(X, Y, n_epoch = 20)
в моем примере я получаю ту же ошибку:
Traceback (most recent call last):
File "2_dnn_test.py", line 27, in <module>
print(m2.predict([[0.9,0.1]]))
File "/home/cpro/.pyenv/versions/3.5.1/lib/python3.5/site-packages/tflearn/models/dnn.py", line 204, in predict
return self.predictor.predict(feed_dict)
File "/home/cpro/.pyenv/versions/3.5.1/lib/python3.5/site-packages/tflearn/helpers/evaluator.py", line 69, in predict
o_pred = self.session.run(output, feed_dict=feed_dict).tolist()
File "/home/cpro/.pyenv/versions/3.5.1/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 372, in run
run_metadata_ptr)
File "/home/cpro/.pyenv/versions/3.5.1/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 625, in _run
% (np_val.shape, subfeed_t.name, str(subfeed_t.get_shape())))
ValueError: Cannot feed value of shape (2,) for Tensor 'InputData/X:0', which has shape '(?, 2)'
Так два одинаковых сети не работают одновременно. Как заставить их работать?
BTW пример не получает ожидаемого результата прогнозирования :)
вы могли бы попробовать лучше испытанный модуль, как keras – Julius
tflearn довольно много слабо проверенная копия keras – Julius
с фракцией примеров и сообщества – Julius