python - 密集层的输入 0 与该层不兼容:输入形状的预期轴 -1 具有值 3,但接收到形状为 (None, 1) 的输入
问题描述
我正在尝试使用遗传算法来自动化神经网络的设计。我对神经网络和张量流非常陌生,所以如果我未能提供信息或正确解释事情,请原谅。我有多个要解决的问题。
我的输入是一个浮点值数组:
self.data_inputs = np.array([self.car_location, self.car_velocity, self.ball_location]).astype(np.float)
我想要的输出是这样的:
self.desired_output = np.asarray([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0])
也就是说,我正在尝试使使用 softmax 的神经网络输出层在此特定实例中生成接近 1 的分数。
第一个问题,我应该将输出定义为(对于神经网络)?目前定义为:
output_layer = tensorflow.keras.layers.Dense(13, activation="softmax", name="output")
第二个问题,我将我的网络定义为这样生成:
input_layer = tensorflow.keras.layers.InputLayer(3, name="input")
dense_layers = []
output_layer = tensorflow.keras.layers.Dense(13, activation="softmax", name="output")
self.text = f"Creating new generation"
if (len(model_array) == 0): # generate random population
for individual in range(self.population_size):
chosen_input = random.randint(3, 60)
input_for_dense_layer = tensorflow.keras.layers.InputLayer(chosen_input)
dense_layers.append(input_for_dense_layer)
index = 1
for i in range(random.randint(1,5)):
dense_layer = tensorflow.keras.layers.Dense(chosen_input, activation = "relu")
dense_layers.append(dense_layer)
chosen_input = random.randint(3, 60)
index += 1
model = tensorflow.keras.Sequential()
model.add(input_layer)
for dense_layer in dense_layers:
model.add(dense_layer)
model.add(output_layer)
model.compile(optimizer=random.choice(self.optimizer_array), loss=random.choice(self.loss_array), metrics=['accuracy'])
model_array.append(model)
但这会产生错误:
ValueError: Input 0 of layer dense_1 is incompatible with the layer: expected axis -1 of input shape to have value 3 but received input with shape (None, 1)
谁能向我解释我如何没有将这些层正确连接在一起?据我所知(和测试)它似乎正在工作,但是当我在这个 API 的上下文中启动它时,我试图使用它会抛出这个错误。我只是没有进行足够广泛的测试吗?
解决方案
- Softmax 输出将返回 13 个正值,其总和为 1。在这里,您似乎希望所有值的“独立”概率在 0 和 1 之间,因此您应该按照自己的意愿去做
activation='sigmoid'
。 - 您的模型有 2 个 InputLayer (
input_layer
和input_for_dense_layer
),这可能会导致第一层的形状预期混乱。
推荐阅读
- r - 自定义损失和切片 (Keras R)
- node.js - Sequelize 删除 JSON 中不存在的行
- entity-framework - EF Core 中实体的导航属性
- javascript - 如何创建一个递增数字的 for 循环,直到找到余数为 0 的数字?
- c# - 带有 Resharper 建议的 C# 静态类
- c - 从使用非标准路径加载的 DLL 加载符号,该路径转发到另一个 DLL
- jquery - 为什么需要访问孩子以获取 $("body") 中的最后一个元素
- java - 如何将邮件中的 base64 图像附加到 JavaMail 和 MimeMessageHelper?
- python - 找不到页面 (404) 请求方法:GET 请求 URL:http://127.0.0.1:4000/person/persondetails/3
- docker - 同步包数据库