如何实现神经网络玩无尽的亚军游戏?

时间:2020-02-17 22:06:53

标签: python tensorflow machine-learning neural-network

在学习了神经网络的基础知识之后,我想创建一个小而独特的项目(比手写数字更困难)。 我选择实施无尽的跑步游戏,记录我的动作并使用收集到的数据训练神经网络。

游戏看起来像这样:

enter image description here

玩家可以左右移动(箭头),目的是避免小行星。 当玩家按下向左箭头时,将记录所有小行星的坐标,玩家位置和向左移动。 当玩家按下向右箭头时,会发生相同的事情,但是“ move”设置为向右。 我在弄清楚如何记录不动时遇到了问题,因此当我按下向上箭头时,我将其编码为记录不动(直线)。所以当我不动时,我以中等速度向上按箭头

最多可以有20个小行星,但我收集了一个较小数据集的数据,以了解其工作原理。

收集的数据如下:

enter image description here

您可以在第一行中看到42列。 板上所有小行星的x坐标的20列。 板上所有小行星的y坐标的20列。 1列代表玩家的x坐标 1列用于移动(0-左; 1-右; 2-直线,无移动)

我收集了4042个样本: 剩余1140 1122对 直线直1780

正如我之前所说,我已经准备好处理20个小行星,但是我只收集了其中的几个小行星的数据,所以其余的列都填充了零。

我使用张量流训练神经网络

data = pd.read_csv('collected_data.csv')
y = data['move']
x = data.drop('move', axis=1)
x_train = x.to_numpy()
y_train = y.to_numpy()

x_train = tf.keras.utils.normalize(x_train, axis=1)

model = tf.keras.Sequential([
    tf.keras.layers.Dense(41,activation='hard_sigmoid',input_shape=x_train[0].shape),
    tf.keras.layers.Dense(41, activation='hard_sigmoid'),
    tf.keras.layers.Dense(41, activation='hard_sigmoid'),
    tf.keras.layers.Dense(3,activation='hard_sigmoid')
])
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), metrics=['accuracy'])

model.fit(x_train, y_train, epochs=10)

model.save('model.h5')

结果:

enter image description here

我的模型根本不合适。当我运行游戏时,太空飞船根本不动,总是选择直行。我尝试了不同的神经网络体系结构,更多的层,更少的层等,但是它几乎不会改变结果。我没有足够的数据吗?数据太复杂了吗?我选错了型号吗? 如有任何建议,我将不胜感激。谢谢!

0 个答案:

没有答案