Python 为什么在为深度学习任务代表棋盘时使用逻辑移位?
最近我遇到了一个twitch streamer,他正在开发自己的基于深度学习的国际象棋引擎。我正在浏览视频中看到的代码,有一件事我不太明白,为什么他在准备训练输入数据(即棋盘表示)时使用逻辑移位。以下是他遵循的粗略步骤:Python 为什么在为深度学习任务代表棋盘时使用逻辑移位?,python,machine-learning,deep-learning,chess,python-chess,Python,Machine Learning,Deep Learning,Chess,Python Chess,最近我遇到了一个twitch streamer,他正在开发自己的基于深度学习的国际象棋引擎。我正在浏览视频中看到的代码,有一件事我不太明白,为什么他在准备训练输入数据(即棋盘表示)时使用逻辑移位。以下是他遵循的粗略步骤: 他获取了一个“pgn”格式的国际象棋游戏数据集 对于每个游戏中的每个移动,都会出现一个新的棋盘状态。这些新状态中的每一个都以以下方式序列化: 他创建了一个8x8矩阵,表示此特定移动后的8x8板 矩阵应该存储8位无符号整数 他将所有棋子放在棋盘上(即矩阵中) 白色部分的定义如下
- 他创建了一个8x8矩阵,表示此特定移动后的8x8板
- 矩阵应该存储8位无符号整数
- 他将所有棋子放在棋盘上(即矩阵中)
- 白色部分的定义如下:
{“P:1,N:2,B:3,R:4,Q:5,K:6}
- 黑色部分的定义如下:
{p:9,n:10,b:11,r:12,q:13,k:14}
- 这意味着,例如,白兵在矩阵中存储为“1”,而黑皇后将存储为“13”
我想知道有谁能帮我理解这些操作背后的逻辑吗?据我所知,他希望根据不同的逻辑移位(3、2、1和0位逻辑左移位)创建5种不同的8x8板表示。但是,我不能完全确定这个假设是否正确,我也不知道在棋盘表示的上下文中运行这些操作背后的原因是什么。这些是二进制的: P:0001 编号:0010 B:0011 R:0100 Q:0101 K:0110 p:1001 n:1010 b:1011 r:1100 q:1101 k:1110 您可以看到,所有黑色片段的左位始终为1,而白色片段的左位始终为0。这就是跳过7和8的原因。 与 (旧邦>>3)和1 颜色指示位一直向右移动。&1删除了所有不需要的内容。因此,如果工件的颜色为黑色,则该表达式返回1,否则返回0。 其他三位表示独立于颜色的工件类型。 您不了解的位操作用于从8位整数中获取各个位,以将它们存储在numpy数组中。numpy阵列是神经网络的输入,具有5x8x8维,因为五个输入神经元用于表示电路板的每个字段
# Init new board state
final_boardstate = np.zeros((5, 8, 8), np.uint8)
# old_boardstate is the initial 8x8 matrix containing uint8 values
# Bit operations that I don't understant
final_boardstate[0] = (old_boardstate>> 3) & 1
final_boardstate[1] = (old_boardstate>> 2) & 1
final_boardstate[2] = (old_boardstate >> 1) & 1
final_boardstate[3] = (old_boardstate >> 0) & 1