我自己准备了一个国际象棋游戏数据集,其中包含由 6x8x8 张量表示的特征(6 层,每层是一块棋盘,代表两种颜色的棋子)。数据集中的标签是形状为 2x8x8 的张量(2 个板代表下一个最佳移动 - 第一个显示棋子要移动的位置,第二个显示棋子移动的位置)。我如何构建网络来获取批量棋盘并输出棋子移动的概率以及以我想要的格式将其移动到哪里?
尝试使用 Conv2D 图层以及 Conv2DTranspose 图层,无论我做什么,尺寸似乎都不匹配
model = tf.keras.Sequential([
tf.keras.layers.Input(shape=(6, 8, 8)),
tf.keras.layers.Conv2D(32, (3, 3), padding='same', activation='selu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2D(64, (3, 3), padding='same', activation='selu'),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Conv2DTranspose(64, (3, 3), padding="same", activation="selu"),
tf.keras.layers.Conv2DTranspose(2, (3, 3), padding="same", activation="selu")
这是我的网络的示例代码。
将张量流导入为 tf
conv_layer = tf.keras.layers.Conv2D(filters=16, kernel_size=(3, 3), strides=(1, 1), padding='valid',activation='relu', input_shape=(高度, 宽度,频道))
当步长为1且不使用padding时,输出特征图的空间维度可以使用以下公式计算:
输出高度 =(输入高度 - 过滤器高度 + 1) 输出宽度 =(输入宽度 - 滤波器宽度 + 1)
如果加上padding,公式就变成:
输出高度 = ((输入高度 - 过滤器高度 + 2 * 填充) / 步幅) + 1 输出宽度 = ((输入宽度 - 滤波器宽度 + 2 * 填充) / 步幅) + 1