在实现多输出神经网络时遇到keras错误

我在实现一个国际象棋AI,其中输出是位置和要移动的棋子。然而,当我按照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 npimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras import layersboard_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)

更新:我仍然在网络上遇到问题,我测试了为答案设置的每个值数组。它们在单独执行时都能正常运行,有人知道可能导致这种情况的问题吗?


回答:

看起来你的数据格式有些奇怪。请看这个

我运行这个例子没有问题

import numpy as npfrom tensorflow.keras import layers, modelsboard_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)

Related Posts

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注