python - 使用多个输入喂养 keras 模型
问题描述
我正在尝试用 Keras 做一个简单的 hello world 并卡住了。一开始我有 1 层,1 个输入和 1 个输出,它对于直线近似效果很好;)
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import RMSprop
from keras.losses import mean_squared_error
mo = Sequential()
d = Dense(1, input_shape=(1,))
mo.add(d)
mo.summary()
mo.compile(loss=mean_squared_error, optimizer=RMSprop(lr=0.4), metrics=['accuracy'])
mo.trainable = True
for i in range(-100, 100):
mo.train_on_batch(x = [i], y = [i])
之后,我对 2 个输入参数有了勇气:
d = Dense(1, input_shape=(2,))
for i in range(-100, 100):
mo.train_on_batch(x = [np.array([i,i])], y = [i])
np.array([1,1]).shape # gives (2,)
虽然我得到了一个例外:
ValueError:检查输入时出错:预期dense_53_input的形状为(2,)但得到的数组形状为(1,)
我尝试了各种组合,例如[[i],[i]]
.
解决方案
第一个维度始终是 Keras 中的批处理维度。批量大小是指在一次传递(向前和向后)中处理的样本数。当您指定input_shape
参数时,它不包括批次维度。因此,输入形状为 的网络采用形状为(2,)
的输入数据,(?,2)
其中?
指的是批量大小。所以你必须传递 shape 数组(?,2)
:
mo.train_on_batch(x=[np.array([[i,i]])], y=[i])
自从:
np.array([[i,i]]).shape # it is (1,2)
推荐阅读
- go - 获取 golang 的协议缓冲区选项信息
- c++ - Mfast 解码器.解码失败
- android - LinearLayout 无法在某些设备上添加视图
- .net - 如何使用 .net 中的 ping 类 ping redis 缓存?
- pandas - 如何在没有嵌套 for 循环的情况下遍历数据框?
- android - 用户注销时不显示通知
- android - 如何将.so 链接到 Visual Studio ndk 动态共享库
- linux - docker journald 日志驱动程序也会导致大量日志记录到 /var/log/syslog 和 /var/log/kern.log
- git - 卸载 Docker 后无法从 Git 拉取/推送代码
- javascript - 声明时变量未定义