我想创建一个模型,能够根据玩家的移动预测9×9井字游戏的赢家。以下是我数据集中的一个例子:
..................................x.............................................. 14 L..............o...................x.................x............................ 67 L..............o...............x...x.................x..............o............. 2 L
有81个字段可以是X
或o
。左侧的数字表示对手的下一步(对手总是0)。字母表示游戏的结果。我决定将所有"."
替换为0
,x
替换为1,o
替换为2。L
或W
使用独热编码。我压缩了带有未来步骤的位置并将其输入模型。这就是我遇到麻烦的地方。我的train_x维度是(249561, 80, 1)。我的样本训练数据是
tensor([0, 0, 0, 0, 1, 2, 1, 2, 0, 0, 2, 0, 0, 0, 0, 2, 1, 0, 0, 0, 1, 2, 2, 2, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0, 2, 0, 1, 0, 0, 0, 2, 0, 1, 0, 1, 1, 1, 0, 2, 0, 0, 1, 2, 1, 0, 0, 1, 2, 2, 1, 1, 0, 0, 0, 0, 0, 2, 1, 0, 2, 0, 0, 1, 0, 0, 0, 2, 0], [67])
我尝试了以下方法
self.fc = nn.Sequential( nn.Linear(80, 4096), nn.ReLU(), nn.Dropout(p=0.5), nn.Linear(4096, 2048), nn.ReLU(), nn.Dropout(p=0.5), nn.Linear(2048, 1), ) def forward(self, x): logit = self.fc(x) return logit
在进行训练循环时,我遇到了一个错误RuntimeError: Expected object of scalar type Float but got scalar type Long for argument #2 'mat1' in call to _th_addmm
我有两个问题。我的数据处理是否正确?我应该使用什么模型?
回答:
要解决你的RuntimeError,这个错误信息非常明确,你只需将你的张量从Long类型转换为Float类型即可:
input_sample = input_sample.float()
或者,在构建样本时,将替换从[0, 1, 2]
(Long)改为[0., 1., 2.]
(Float)。