繁体   English   中英

实施具有多个输出的神经网络时遇到 keras 错误

[英]Encountering error for keras when implementing neural network with multiple outputs

我正在实施一个国际象棋 AI,其中 output 是 position 和要移动的棋子。 但是,当我按照keras API 文档上的多输出教程进行操作时,它返回错误

Failed to find data adapter that can handle input:(<class 'list'> containing values of types {'(<class \'list\'> containing values of types {\'(<class \\\'list\\\'> containing values of types {\\\'(<class \\\\\\\'list\\\\\\\'> containing values of types {"<class \\\\\\\'int\\\\\\\'>"})\\\'})\'})'}), (<class 'dict'> containing {"<class 'str'>"} keys and {"<class 'numpy.ndarray'>"} values)

抱歉,如果复制的部分太长,我只是想确保更容易找到问题所在。

以下代码的可重现部分:

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

board_inputs = keras.Input(shape=(8, 8, 12))


conv1= layers.Conv2D(10, 3, activation='relu')
conv2 = layers.Conv2D(10, 3, activation='relu')
pooling1 = layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding="valid", data_format=None,)
pooling2 = layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding="valid", data_format=None,)
flatten = keras.layers.Flatten(data_format=None)


x = conv1(board_inputs)
x = pooling1(x)
x = conv2(x)
x = flatten(x)
piece_output = layers.Dense(12,name = 'piece')(x)
alpha_output = layers.Dense(7,name = 'alpha')(x)
numbers_output = layers.Dense(7,name = 'number')(x)


model = keras.Model(inputs=board_inputs, outputs=[piece_output,alpha_output,numbers_output], name="chess_ai_v3")
model.compile(
    loss=keras.losses.mse,
    optimizer=keras.optimizers.Adam(),
    metrics=None,
)

keras.utils.plot_model(model, "multi_input_and_output_model.png", show_shapes=True)
history = model.fit(
    trans_data[:len(trans_data)],
    {"piece": pieces[:len(trans_data)], "alpha": alphas[:len(trans_data)],"number": numbers[:len(trans_data)]},
    epochs=2,
    batch_size=32,
)
# history = model.fit(trans_data[:len(trans_data)],batch_size=64, epochs=1000,verbosity = 2)

更新:我仍然对 .network 有问题,我测试了为答案设置的每个 arrays 值。 它们在单独执行时通常都是 function,有谁知道可能导致这种情况的任何问题吗?

您的数据格式似乎很奇怪。 看看这个

我运行这个例子没问题

import numpy as np
from tensorflow.keras import layers, models


board_inputs = layers.Input(shape=(8, 8, 12))
conv1= layers.Conv2D(10, 3, activation='relu')
conv2 = layers.Conv2D(10, 3, activation='relu')
pooling1 = layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding="valid", data_format=None,)
pooling2 = layers.MaxPooling2D(pool_size=(2, 2), strides=None, padding="valid", data_format=None,)
flatten = layers.Flatten(data_format=None)


x = conv1(board_inputs)
x = pooling1(x)
x = conv2(x)
x = flatten(x)
piece_output = layers.Dense(12,name = 'piece')(x)
alpha_output = layers.Dense(7,name = 'alpha')(x)
numbers_output = layers.Dense(7,name = 'number')(x)


model = models.Model(inputs=board_inputs, outputs=[piece_output,alpha_output,numbers_output], name="chess_ai_v3")
model.compile(loss='mse', optimizer='adam')
model.summary()

X = np.random.uniform(0,1, (100,8,8,12))
y = {"piece": np.random.uniform(0,1,(100,12)), 
     "alpha": np.random.uniform(0,1,(100,7)),
     "number": np.random.uniform(0,1,(100,7))}

history = model.fit(X,y, epochs=2, batch_size=32)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM