如何解决python,keras建立训练模型时出错:TypeError:“ int”对象不可迭代
我在输入keras训练模型时遇到麻烦。我收到的错误是'int对象不可互操作。我正在使用openai球杆模拟,从中我拿出得分高于50的游戏,并使用keras神经网络来关联在特定状态下应采取的行动。
def initial_population():
# [OBS,MOVES]
training_data = []
# all scores:
scores = []
# just the scores that met our threshold:
accepted_scores = []
# iterate through however many games we want:
for _ in range(initial_games):
score = 0
# moves specifically from this environment:
game_memory = []
# previous observation that we saw
prev_observation = []
# for each frame in 200
for _ in range(goal_steps):
# choose random action (0 or 1)
action = random.randrange(0,2)
# do it!
observation,reward,done,info = env.step(action)
# notice that the observation is returned FROM the action
# so we'll store the previous observation here,pairing
# the prev observation to the action we'll take.
if len(prev_observation) > 0 :
game_memory.append([prev_observation,action])
prev_observation = observation
score+=reward
if done: break
# IF our score is higher than our threshold,we'd like to save
# every move we made
# NOTE the reinforcement methodology here.
# all we're doing is reinforcing the score,we're not trying
# to influence the machine in any way as to HOW that score is
# reached.
if score >= score_requirement:
accepted_scores.append(score)
for data in game_memory:
# convert to one-hot (this is the output layer for our neural network)
if data[1] == 1:
output = [0,1]
elif data[1] == 0:
output = [1,0]
# saving our training data
training_data.append([data[0],output])
# reset env to play again
env.reset()
# save overall scores
scores.append(score)
# just in case you wanted to reference later
training_data_save = np.array(training_data)
np.save('saved.npy',training_data_save)
# some stats here,to further illustrate the neural network magic!
'''
print('Average accepted score:',mean(accepted_scores))
print('Median score for accepted scores:',median(accepted_scores))
print(Counter(accepted_scores))
'''
return training_data
def neural_network_model(input_size):
model = keras.Sequential([
keras.layers.Flatten(input_shape=(input_size)),keras.layers.Dense(128,activation='relu'),keras.layers.Dense(256,keras.layers.Dense(512,keras.layers.Dense(2)
])
model.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
return model
def train_model(training_data,model=False):
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=5,snapshot_step=500,show_metric=True,run_id='openai_learning')
return model
return training_data
training_data = initial_population()
model = train_model(training_data)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。