![](/img/trans.png)
[英]In Tensorflow.keras 2.0, when a model has multiple outputs, how to define a flexible loss function for model.fit()?
[英]How to define model input and outputs in tensorflow keras?
我正在尝试创建一个 model,它应该具有 nx8x8 输入和 8x8 output 或低于 64 个单元 output,但不知道如何创建它以使其工作。 我正在尝试使用以下代码:
model = tf.keras.Sequential()
input = tf.keras.layers.Flatten(input_shape=(8,8), name='input')
model.add(input)
middle = tf.keras.layers.Dense(256, activation='sigmoid', name='a')
model.add(middle)
output = tf.keras.layers.Dense(64, activation='softmax', name='b')
model.add(output)
print(model.input_shape)
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
train_input = np.array(
[
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0, 0, 3],
[3, 0, 3, 0, 3, 0, 0, 0],
[0, 3, 0, 3, 0, 3, 0, 3],
[3, 0, 3, 0, 3, 0, 3, 0]
],
[
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 3],
[3, 0, 3, 0, 3, 0, 0, 0],
[0, 3, 0, 3, 0, 3, 0, 3],
[3, 0, 3, 0, 3, 0, 3, 0]
]
)
train_output = np.array([
0, 1, 0, 1, 0, 1, 0, 1,
1, 0, 1, 0, 1, 0, 1, 0,
0, 0, 0, 1, 0, 1, 0, 1,
1, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3,
3, 0, 3, 0, 3, 0, 0, 0,
0, 3, 0, 3, 0, 3, 0, 3,
3, 0, 3, 0, 3, 0, 3, 0,
])
model.fit(train_input, train_output, epochs=10)
我做错了什么? 如何定义输入和输出形状?
您需要向您的train_output
添加一个实例。 您的train_input
上有两个样本,但只有一个 label。您需要与输入实例相同数量的标签。 这解决了您的基数问题。
但是,您的数据格式非常奇怪,我敢肯定您在训练时会遇到更多问题。 您正在执行分类任务,但您的标签没有按应有的方式进行处理。 你应该将你的标签编码成类(例如 0,1,2)然后你的 model 将只有 output 一个分类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.