python - 将图像数据发送到 NEAT 中的神经网络,但我需要保留颜色?
问题描述
我目前正在尝试使用复古健身房和整洁来创建一个神经网络,它将扮演 Robotniks Mean Bean Machine 博士。
import retro
import numpy as np
import cv2
import neat
import pickle
env = retro.make('DrRobotniksMeanBeanMachine-Genesis')
imgarray = []
def eval_genomes(genomes, config):
for genome_id, genome in genomes:
ob = env.reset() # start obs view
ac = env.action_space.sample() # action
inx, iny, inc = env.observation_space.shape # screen resolution
inx = int(inx/8)
iny = int(iny/8)
print(inc)
net = neat.nn.recurrent.RecurrentNetwork.create(genome, config) # create NN
current_max_fitness = 0
fitness_current = 0
frame = 0
counter = 0
score = 0
score_aim = 1000
score_max = 0
finished = False
done = False
while not done:
env.render()
frame += 1
# image rendering for NN
ob = cv2.resize(ob, (inx, iny))
ob = cv2.cvtColor(ob, cv2.COLOR_BGR2GRAY)
ob = np.reshape(ob, (inx, iny))
for x in ob:
for y in x:
imgarray.append(y)
nnOutput = net.activate(imgarray)
ob, rew, done, info = env.step(nnOutput)
imgarray.clear()
score = info['score']
if score > score_max:
fitness_current += 1
score_max = score
if score > score_aim:
fitness_current += 100000
done = True
if fitness_current > current_max_fitness:
current_max_fitness = fitness_current
counter = 0
else:
counter += 1
if done or counter == 40:
done = True
print(genome_id, fitness_current)
genome.fitness = fitness_current
config = neat.Config(neat.DefaultGenome, neat.DefaultReproduction,
neat.DefaultSpeciesSet, neat.DefaultStagnation,
'config-feedforward')
p = neat.Population(config)
winner = p.run(eval_genomes)
with open('winner.pkl', 'wb') as output:
pickle.dump(winner, output, 1)
这行得通,但是它很慢,我担心查看它正在查看的内容无法区分不同的 bean。我知道每个豆子都有一个与其颜色相对应的形状,但是我认为图像数据太压缩,神经网络无法看到这一点。
反正有没有让神经网络看到颜色?当我尝试使用不同的 cv2 颜色转换(如 BGR2HSL)时,它建议我无法调整 numpy 数组的大小以适应。我稍微调整了屏幕分辨率,但数字跳来跳去。这是一个示例错误消息:
ValueError:无法将大小为 3360 的数组重塑为形状 (28,40)
如果有人有任何经验或建议,或者可以为我指出正确的解决方案,我将不胜感激!
解决方案
推荐阅读
- asp.net - asp.net核心中可能存在依赖注入问题?
- reactjs - 单击按钮时菜单不关闭
- vba - 当元素属性的整个值动态变化时如何创建查询
- reporting-services - SSRS 以正确的格式显示 SQL 查询
- php - 如何在多个图像的循环上使用网格
- visual-studio-code - 在 VS Code 中调试作为 dotnet 解决方案一部分的 C# Azure Functions
- javascript - 如何以更 DRY 的方式收听 3 个元素中的 mouseover 和 mouseout 事件?
- javascript - 如何使用 JavaScript 设置函数参数?
- mybatis - MyBatis 没有 Spring,事务使用提供的连接
- reactjs - TS2345:“字符串”类型的参数 | undefined' 不能分配给'string' 类型的参数。类型“未定义”不可分配给类型“字符串”