python - 如何从训练数据列表和预期结果中创建张量流数据库,以及如何构造独特的网络形状
问题描述
我正在创建一个神经网络,并定制了一些来自国际象棋游戏的位置训练数据。然后我创建了一个函数,将这些数据分成 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的这篇研究论文
这就是我尝试使用 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)
推荐阅读
- r - 如何按第三个变量对图表中的数据进行排序?
- haskell - opaleye 是否支持 upsert / INSERT ON CONFLICT?
- maven - 将不同的存储库组合为一个 Maven 项目
- python - Python正则表达式匹配不包括特定字符的字符串
- python - 循环pytorch中的内存泄漏
- android-studio - 错误:此项目使用 AndroidX 依赖项,但未启用“android.useAndroidX”属性。在 gradle.prop 中将此属性设置为 true
- flutter-layout - 我想在 Flutter 中创建类似的东西
- c - 堆排序,数组的索引从 1 开始而不是 0
- java - 配置带有子项目的 Maven 项目以访问所有 Java 设施
- python-3.x - sns.pairplot 显示密度曲线而不是直方图