【问题标题】:Keras shapes input for training and prediction raising value and attribute errorsKeras 塑造用于训练和预测的输入,提高价值和属性错误
【发布时间】:2020-05-29 23:25:11
【问题描述】:

我在将数据输入到用于预测和训练的简单 keras 模型中时遇到了困难。我已经查看了相关问题,但在花了 6 个小时试图自己解决这个问题后,我仍然在努力解决这个问题。

进口和网络:

from tensorflow import keras
from tensorflow.keras.layers import Dense
from tensorflow import convert_to_tensor
from random import randint

model = keras.Sequential()
model.add(Dense(3, activation='relu', input_dim=5))
model.add(Dense(4, activation='sigmoid'))
model.add(Dense(2))
model.compile(loss=keras.losses.MeanSquaredError(),
              optimizer='adam',
              metrics=['MeanSquaredError'])

尝试使用网络进行预测:

X = [4, 5, 2, 8, 9]
tensor = convert_to_tensor(X)
print(tensor.shape) # Prints (5, ) as expected
prediction = model.predict(tensor)

出现以下错误:

ValueError: 检查输入时出错:预期dense_input 的形状为(5,),但得到的数组的形状为(1,)

尝试训练网络:

states = [[7, 8, 3, 9, 7], [0, 7, 5, 0, 3], [2, 5, 8, 1, 10], [9, 9, 9, 8, 6]]
actions = [[1, 0], [0, 1], [0, 1], [0, 1]]

tensor_states = convert_to_tensor(states)
tensor_actions = convert_to_tensor(actions)

print(tensor_states.shape)      # Prints (4, 5)
print(tensor_actions.shape)     # Prints (4, 2)

model.fit(tensor_states, tensor_actions, verbose=0)

出现以下错误:

ValueError: TypeError: len() of unsized object

如果没有 verbose=0,我会收到此错误:

AttributeError: 'ProgbarLogger' 对象没有属性 'log_values'

我在 conda 环境中运行。

我就这个话题询问了previous question,但我意识到我把问题复杂化了,我并不确定我在问什么。现在我做了更多的研究,我觉得我已经把我的问题归结为最基本的形式。我在考虑this meta post 后写了这个新问题。如果我应该刚刚编辑我之前的问题,请告诉我。

编辑 - 使用 darcycp 进行故障排除

正如下面给出的答案所指出的,我应该给出一个列来预测网络(使用两组括号)。但是,这会产生以下错误:

ValueError: TypeError: len() of unsized object

然后不使用张量(因为 keras predict 函数可以直接接受 python 列表)给出以下错误:

ValueError: 尝试将类型 () 不受支持的值 (4) 转换为张量

这对我来说非常不寻常,因为我没有将 numpy 导入到这个程序中。

【问题讨论】:

    标签: python tensorflow keras conda


    【解决方案1】:

    我认为这里发生的情况是您的张量 X51-D 输入的张量。当您希望它是具有一个输入的单个张量时,该模型的有效输入由 5 个数字组成。

    尝试改为:

    X =  [[4, 5, 2, 8, 9]]
    

    您可以将X 视为一个数组,其中可以包含您任务的不同输入实例。这些实例中的每一个本身都是一个输入数组。虽然在这种情况下 X 在另一种情况下只有 1 个输入,但它可能看起来像:

    X =  [[4, 5, 2, 8, 9],[6,7,9,2,5]]
    

    也就是说X 现在是len() == 2 的列表,该列表中的每个项目都是模型的输入。默认情况下,Keras 层假定X 将包含成批的输入数据。

    【讨论】:

    • 我认为这是一个问题,但我现在得到了预测行的“ValueError: TypeError: len() of unsized object”以及您建议的更改
    • 也许最初尝试不将输入转换为张量,看看问题是否出在张量上。 predict 函数能够很好地处理列表。
    • 给出错误“ValueError: Attempt to convert a value (4) with an unsupported type () to a Tensor.”这很不寻常,因为我没有导入 numpy
    猜你喜欢
    • 2018-12-10
    • 2020-10-30
    • 1970-01-01
    • 2021-12-09
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多