我正在用tflearn和gym编写机器学习脚本。在
我可以用python脚本让一个网络正常工作,但是每当我试图调用我的函数来建立第二个或第三个网络并用模型.拟合,我得到一个
tensorflow.python.framework.错误_impl.InvalidArgumentError
编辑;目标应该是建立几个不同的网络,以便进行比较。首先,这应该只关注输入数据和训练周期数,但最后,我想比较不同的网络规模。 另外,我想运行一个循环,建立两个以上的网络。在
以下代码再现了我的错误:
创建一个随机操作数组,大小为pop\u大小
创建一个神经网络
如果没有通过,则创建新模型,并根据提供的训练数据训练模型
import gym
import random
import numpy as np
import tflearn
from tflearn.layers.core import input_data, dropout, fully_connected
from tflearn.layers.estimator import regression
LR = 1e-3
env = gym.make('CartPole-v0')
env.reset()
goal_steps = 500
score_requirement = 1
def initial_population(pop_size):
training_data = []
scores = []
accepted_scores = []
for _ in range(pop_size):
score = 0
game_memory = []
prev_observation = []
for _ in range(goal_steps):
action = random.randrange(0,2)
observation, reward, done, info = env.step(action)
if len(prev_observation) > 0:
game_memory.append([prev_observation, action])
prev_observation = observation
score += reward
if done:
break
if score >= score_requirement:
accepted_scores.append(score)
for data in game_memory:
if data[1] == 1:
output = [0,1]
elif data[1] == 0:
output = [1,0]
training_data.append([data[0], output])
env.reset()
scores.append(score)
return np.array(training_data)
def neural_network_model(input_size):
network = input_data(shape=[None, input_size, 1], name='input')
network = fully_connected(network, 128, activation='relu')
network = dropout(network, 0.8)
network = fully_connected(network, 2, activation='softmax')
network = regression(network, optimizer='adam', learning_rate=LR,
loss='categorical_crossentropy', name='targets')
model = tflearn.DNN(network, tensorboard_dir='log')
return model
def train_model(training_data, model=False, n_training_epochs=5):
X = np.array([i[0] for i in training_data]).reshape(-1, len(training_data[0][0]), 1)
Y = [i[1] for i in training_data]
if not model:
model = neural_network_model(input_size = len(X[0]))
model.fit({'input':X}, {'targets':Y}, n_epoch=n_training_epochs, snapshot_step=500, show_metric=True)
return model
if __name__ == "__main__":
training_data = initial_population(5)
print("still alive 1")
model = train_model(training_data, n_training_epochs=1)
print("still alive 2")
training_data = initial_population(1)
print("still alive 3")
model = train_model(training_data, n_training_epochs=1)
print("still alive 4")
通过输出:
^{pr2}$关键的部分似乎是,函数模型.拟合第二次调用时,无法获取正确的数据类型。看起来这两个实例可能共享一些变量、数据等,这会把事情搞砸。在
对于常规的tensorflow,我看到您可能需要为每个新模型单独进行会话,但我不知道这是否适用于tflearn包。在
我正在开发Windows10和Python3.6。在
实现这一点的一种方法是将对
train_model
的第二个调用更改为train_model(training_data, model, n_training_epochs=1)
,以便重用它在第一次调用中创建的模型。这似乎不是你想要的,因为你提到要建立第二个网络。在在同一个会话中创建第二个模型似乎会导致问题,但是您可以创建一个模型并使用
model.save
将其保存,然后再次运行程序并将另一个模型保存到另一个文件中。在从你的问题来看,你不太清楚你想达到什么目的,所以我不确定这两种方法是否对你有用。在
编辑:好吧,我想我已经知道怎么做你想做的了。如果不指定要使用的图形,则TensorFlow会将所有内容放入默认图形中。您可以指定要在单独的图中显示的内容,如下所示:
相关问题 更多 >
编程相关推荐