【问题标题】:ValueError: Error when checking input: expected dense_1_input to have 4 dimensions, but got array with shape (20593, 4, 1)ValueError:检查输入时出错:预期的dense_1_input有4维,但得到了形状为(20593、4、1)的数组
【发布时间】:2017-12-15 16:29:03
【问题描述】:

我正在尝试关注 senddex 的游戏 AI 机器人教程 (https://www.youtube.com/watch?v=G-KvpNGudLw),但我尝试使用 keras 来代替 tflearn 来实现相同的实现。

模型函数

def neural_network_model(input_size):
    network = Sequential()

    network.add(Dense(units = 128, activation='relu', kernel_initializer = 'uniform', input_shape = [None, input_size, 1]))
    network.add(Dropout(0.2))

    network.add(Dense(units = 256, activation='relu', kernel_initializer = 'uniform'))
    network.add(Dropout(0.2))

    network.add(Dense(units = 512, activation='relu', kernel_initializer = 'uniform'))
    network.add(Dropout(0.2))

    network.add(Dense(units = 256, activation='relu', kernel_initializer = 'uniform'))
    network.add(Dropout(0.2))

    network.add(Dense(units = 128, activation='relu', kernel_initializer = 'uniform'))
    network.add(Dropout(0.2))

    network.add(Dense(units = 2, activation = 'softmax', kernel_initializer = 'uniform'))
    adam = optimizers.Adam(lr=LR, decay=0.0)
    network.compile(optimizer=adam, loss='categorical_crossentropy', metrics = ['accuracy'])
    return network

模型训练函数

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(len(X[0]))
    
    model.fit(X,Y, epochs = 5) 
    return model

训练数据在哪里:

def initial_population():
    training_data = [] # Observations and the move made, append to only when score > 50
    scores = []
    accepted_scores = []
    for x in range(initial_games):
        score = 0
        game_memory = []
        prev_observation = []
        for x in range(goal_steps):
            action = random.randrange(0,2) # 0's and 1's
            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]
                if data[1] == 0:
                    output = [1,0]
            
                training_data.append([data[0], output])
    
        env.reset()
        scores.append(score)

    training_data_save = np.array(training_data)
    np.save('saved.npy', training_data_save)

    print('Average accepted score : ', mean(accepted_scores))
    print('Median accepted scores : ', median(accepted_scores))
    print(Counter(accepted_scores))

    return training_data
training_data = initial_population()

我得到的错误在标题中。我是深度学习的新手,我还没有很好地掌握重塑部分。

【问题讨论】:

    标签: deep-learning keras keras-layer keras-2


    【解决方案1】:

    所以经过一些调整后,我终于让网络正常工作了。如果有人有兴趣,我通过执行以下操作来修复它:

    我将第一个 Dense 层改为:

    network.add(Dense(units = 128, activation='relu', kernel_initializer = 'uniform', input_dim = input_size))
    

    模型训练函数中,我将输入的形状改为 2D 而不是 3D:

    def train_model(training_data, model=False):
    X = np.array([i[0] for i in training_data]).reshape(-1, len(training_data[0][0]))
    Y = np.array([i[1] for i in training_data])
    
    if not model:
        model = neural_network_model(len(X[0]))
    
    model.fit(X,Y, epochs = 5) 
    return model
    

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2020-04-11
      • 2020-11-22
      • 1970-01-01
      • 2018-01-09
      • 2021-11-24
      • 2018-11-09
      • 2019-12-17
      • 2019-05-31
      相关资源
      最近更新 更多