python - Keras 输入维度层
问题描述
问题
我正在使用 Model API 创建一个 Keras 网络,该网络接受两个输入和一个输出。训练网络时出现以下错误:
检查模型输入时出错:您传递给模型的 Numpy 数组列表不是模型预期的大小。预计会看到 2 个数组,但得到了以下 1 个数组的列表:
尽管有这个错误,输入 X 数组的形状为 (2,8),输出 y 数组的形状为 (1,4)。
已经尝试过的事情
关于 SO 有许多类似的问题,但是,他们的解决方案主要围绕确保 X 和 y 是 Numpy 数组。从我的实现中可以看出,我已经这样做了。因此,我不认为这是一个重复的问题。
执行
我已将模型定义如下:
opt = Adam(lr = alpha)
input = Input(shape=(input_dim_,))
delta = Input(shape=[1])
l1 = Dense(units = 1024, input_dim = input_dim_, activation = "relu")(input)
l2 = Dense(units=512, activation="relu")(l1)
def loss_function (y,y_pred):
y_pred = K.clip(y_pred,1e-8,1-1e-8)
return K.sum(-y*K.log(y_pred)*delta)
if model_type == "actor":
out = Dense(units = output_dim_, activation="softmax")(l2)
model = Model(input=[input,delta], output = [out])
model.compile(loss = loss_function,optimizer=opt)
并通过执行以下操作来训练模型:
X = [s_t,delta]
X = np.array(X)
actor.fit(X,y,verbose=0)
解决方案
您没有正确传递数据:
actor.fit(X,y,verbose=0)
这里X
应该是一个包含两个 numpy 数组的列表,每个 numpy 数组对应于你的一个输入(你有一个有两个输入的模型):所以它应该更像这样:
X = [np.array(s_t), np.array(delta)]
actor.fit(X, y, verbose=0)
然后它应该工作。
推荐阅读
- c# - .NET Core 3.1 Cors 问题
- papermill - 运行 papermill 我收到 FileNotFound 错误
- .net - IE 需要更多时间从 API 下载资源
- tortoisegit - TortoiseGit Log 窗口中标签的不同形状是什么意思?
- python - Docker Minimal Image PyInstaller 二进制文件?
- html - 为什么即使我有transition: *all* 2s;,transition timing function 对transform 属性起作用但对filter 属性不起作用
- javascript - 我如何用猫鼬制作文件清单?(架构)
- python-3.x - 如何将列表项更改为 int?
- c# - 从数组中构建 Lambda 选择
- python-3.x - 如何将对象的类型从“pandas.core.groupby.generic.SeriesGroupBy”转换为“pandas.core.series.Series”?