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 (将#修改为@)