如何根据训练数据和预期结果列表制作张量流数据库,以及如何构造独特的网络形状
how to make a tensorflow database from a list of training data and expected results, and how to structure unique network shapes
我正在创建一个神经网络,并定制了一些来自国际象棋游戏的位置训练数据。然后我创建了一个函数,将此数据拆分为 797*2 位的二进制输入和预期输出为 0 和 1 之间的两个浮点数(具体来说 [0, 1]、[0.5, 0.5]、[1, 0] 是唯一的有预期的输出)。以下是包含此数据的变量示例:
x_train = [[1, 0, 0,... 0, 0, 1],... [0, 0, 0,... 0, 1, 0]] # input: each index contains two positions with 797 bit binary values. couple hundred thousand items in the list.
y_train = [[0, 1], [0.5, 0.5],... [0.5, 0.5]] # expected output: each index contains two digits between 0 and 1 showing which position is better, or are they equal. same size as x_train.
然而,我找到的所有关于 tensorflow 的教程都向人们展示了他们使用他们定制数据库中的数据,而且我不知道如何构建我的数据以便 tensorflow 可以读取它。这就是我的网络的样子(每个节点输入 797 个节点除外):
如您所见,前 4 层被分成两部分,其中节点不能混合,第 5 层连接到第 4 层中的每个节点,就像普通网络一样。然后它继续正常,直到我们得到我们的输出。如果您有兴趣,它基于 Eli (Omid) David、Nathan S. Netanyahu 和 Lior Wolf 的这项研究 paper
这就是我尝试用 tensorflow 构建它的方式:
import tensorflow as tf
# create the models
model_c = tf.keras.Sequential()
model_c.add(tf.keras.Input(shape=(400,)))
model_c.add(tf.keras.layers.Dense(200, activation="sigmoid"))
model_c.add(tf.keras.layers.Dense(100, activation="sigmoid"))
model_c.add(tf.keras.layers.Dense(2, activation="sigmoid"))
model_b = tf.keras.Sequential()
model_b.add(tf.keras.Input(shape=(797,)))
model_b.add(tf.keras.layers.Dense(600, activation="sigmoid"))
model_b.add(tf.keras.layers.Dense(400, activation="sigmoid"))
model_b.add(tf.keras.layers.Dense(200, activation="sigmoid"))
model_a = tf.keras.Sequential()
model_a.add(tf.keras.Input(shape=(797,)))
model_a.add(tf.keras.layers.Dense(600, activation="sigmoid"))
model_a.add(tf.keras.layers.Dense(400, activation="sigmoid"))
model_a.add(tf.keras.layers.Dense(200, activation="sigmoid"))
# compile the models
model_c.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
model_b.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
model_a.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
# run the models
# idk how
我真的不知道如何进行这项工作,因为再一次,我发现的每个教程都涉及更平凡的东西(比如导入预制数据库和简单的神经网络)。感谢您的帮助。
使用此代码:
import tensorflow as tf
input = tf.keras.Input(shape=(797,))
model_a = tf.keras.Sequential(
[tf.keras.layers.Dense(600, activation="sigmoid"),
tf.keras.layers.Dense(400, activation="sigmoid"),
tf.keras.layers.Dense(200, activation="sigmoid")]
)
output1 = model_a(input)
model_b = tf.keras.Sequential(
[tf.keras.layers.Dense(600, activation="sigmoid"),
tf.keras.layers.Dense(400, activation="sigmoid"),
tf.keras.layers.Dense(200, activation="sigmoid")]
)
output2 = model_b(input)
x = tf.keras.layers.Concatenate()([output1, output2])
model_c = tf.keras.Sequential(
[tf.keras.layers.Dense(200, activation="sigmoid"),
tf.keras.layers.Dense(100, activation="sigmoid"),
tf.keras.layers.Dense(2, activation="sigmoid")]
)
output = model_c(x)
model = tf.keras.Model(input, output)
# compile the models
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
# run the models
x_train = tf.random.uniform([2000, 797], 0, 2, tf.int32)
y_train = tf.random.uniform([2000, 2])
model.fit(x_train, y_train)
我正在创建一个神经网络,并定制了一些来自国际象棋游戏的位置训练数据。然后我创建了一个函数,将此数据拆分为 797*2 位的二进制输入和预期输出为 0 和 1 之间的两个浮点数(具体来说 [0, 1]、[0.5, 0.5]、[1, 0] 是唯一的有预期的输出)。以下是包含此数据的变量示例:
x_train = [[1, 0, 0,... 0, 0, 1],... [0, 0, 0,... 0, 1, 0]] # input: each index contains two positions with 797 bit binary values. couple hundred thousand items in the list.
y_train = [[0, 1], [0.5, 0.5],... [0.5, 0.5]] # expected output: each index contains two digits between 0 and 1 showing which position is better, or are they equal. same size as x_train.
然而,我找到的所有关于 tensorflow 的教程都向人们展示了他们使用他们定制数据库中的数据,而且我不知道如何构建我的数据以便 tensorflow 可以读取它。这就是我的网络的样子(每个节点输入 797 个节点除外):
如您所见,前 4 层被分成两部分,其中节点不能混合,第 5 层连接到第 4 层中的每个节点,就像普通网络一样。然后它继续正常,直到我们得到我们的输出。如果您有兴趣,它基于 Eli (Omid) David、Nathan S. Netanyahu 和 Lior Wolf 的这项研究 paper
这就是我尝试用 tensorflow 构建它的方式:
import tensorflow as tf
# create the models
model_c = tf.keras.Sequential()
model_c.add(tf.keras.Input(shape=(400,)))
model_c.add(tf.keras.layers.Dense(200, activation="sigmoid"))
model_c.add(tf.keras.layers.Dense(100, activation="sigmoid"))
model_c.add(tf.keras.layers.Dense(2, activation="sigmoid"))
model_b = tf.keras.Sequential()
model_b.add(tf.keras.Input(shape=(797,)))
model_b.add(tf.keras.layers.Dense(600, activation="sigmoid"))
model_b.add(tf.keras.layers.Dense(400, activation="sigmoid"))
model_b.add(tf.keras.layers.Dense(200, activation="sigmoid"))
model_a = tf.keras.Sequential()
model_a.add(tf.keras.Input(shape=(797,)))
model_a.add(tf.keras.layers.Dense(600, activation="sigmoid"))
model_a.add(tf.keras.layers.Dense(400, activation="sigmoid"))
model_a.add(tf.keras.layers.Dense(200, activation="sigmoid"))
# compile the models
model_c.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
model_b.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
model_a.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
# run the models
# idk how
我真的不知道如何进行这项工作,因为再一次,我发现的每个教程都涉及更平凡的东西(比如导入预制数据库和简单的神经网络)。感谢您的帮助。
使用此代码:
import tensorflow as tf
input = tf.keras.Input(shape=(797,))
model_a = tf.keras.Sequential(
[tf.keras.layers.Dense(600, activation="sigmoid"),
tf.keras.layers.Dense(400, activation="sigmoid"),
tf.keras.layers.Dense(200, activation="sigmoid")]
)
output1 = model_a(input)
model_b = tf.keras.Sequential(
[tf.keras.layers.Dense(600, activation="sigmoid"),
tf.keras.layers.Dense(400, activation="sigmoid"),
tf.keras.layers.Dense(200, activation="sigmoid")]
)
output2 = model_b(input)
x = tf.keras.layers.Concatenate()([output1, output2])
model_c = tf.keras.Sequential(
[tf.keras.layers.Dense(200, activation="sigmoid"),
tf.keras.layers.Dense(100, activation="sigmoid"),
tf.keras.layers.Dense(2, activation="sigmoid")]
)
output = model_c(x)
model = tf.keras.Model(input, output)
# compile the models
model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])
# run the models
x_train = tf.random.uniform([2000, 797], 0, 2, tf.int32)
y_train = tf.random.uniform([2000, 2])
model.fit(x_train, y_train)