Keras 如何读取输入数据?
Posted
技术标签:
【中文标题】Keras 如何读取输入数据?【英文标题】:How does Keras read input data? 【发布时间】:2018-06-07 21:50:21 【问题描述】:我在用Keras做一个项目,不明白Keras是如何使用数据输入的,也就是说Keras在创建第一层的时候是如何读取我们的输入数据的。
例如:
-
model = Sequential()
model.add(Dense(10, activation='sigmoid', input_dim=3,name='layer1'))
在这个模型中,有 10 个神经元和一个 3 维输入是什么意思?如果输入数据有 100 个样本(矩阵数据中的行数),Keras 是如何使用它们的?
谢谢。
【问题讨论】:
【参考方案1】:input_dim=3
表示您的每个输入数据都有 3 个维度。在您的情况下,包含 100 个示例的输入数据的形状应为 (100,3)
。编译模型时,示例的数量并不重要。但是您应该确保每个输入数据的维度与您在第一个密集层中设置的input_dim
匹配。
一个简短的例子:
model = Sequential()
model.add(Dense(10, input_dim=3, activation='sigmoid'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adamax')
model.fit(xTrain, yTrain, epochs=50, batch_size=10)
【讨论】:
谢谢!它帮助我更好地理解。 :)【参考方案2】:input_dim=3
表示您的数据具有 3 个特征,这些特征将用于确定最终结果,例如。如果您想确定动物数据指的是什么,您可以将宽度、高度和颜色作为数据。
100 examples
不同动物的宽度、高度和颜色组合允许神经网络调整其参数(学习)什么宽度、高度和颜色指的是哪种动物。 Keras 从神经元的随机权重开始,然后使用提供的样本逐个调整网络权重 100 次。 Keras 实际上使用批量,这意味着将 100 个样本分成更小的组,以获得更好的学习率和一般性能(一次存储在内存中的数据更少)。
10 neurons
是网络能够存储神经元权重和输入数据之间相乘结果的 10 个“位置”。你可以把神经元想象成一个灯泡,它会根据数据是否显示一些有用的数据特征来点亮或变暗。如果动物身高超过 3 米。每个神经元都有自己的一组权重,当网络从您的数据中检查下一个样本时,这些权重会发生一些变化。最后,您应该有 10 个神经元(灯泡),它们的反应或多或少取决于数据中不同特征的存在,例如。如果动物很高。
您拥有的神经元越多,您可以跟踪的特征就越多,例如。如果动物高大、多毛、橙色、斑点等。但是你拥有的神经元越多,你的网络就越有可能过于精确,并且会学习到你的训练示例所独有的特征(这称为过度拟合),但不要帮助您识别未包含在训练数据中的动物样本(这称为泛化能力,是实际训练神经网络最重要的一点)。然后,选择神经元数量是一项实际练习,您可以在其中搜索适合您需要的神经元。
我希望它能澄清你的疑惑。如果您想更深入地了解这个领域,网上有很多很好的资源,详细解释了神经网络的训练过程,包括特征、神经元和学习。
【讨论】:
谢谢!现在我明白了很多。谢谢 :D 如果可以的话,我还有一个问题。如果我们以动物为例。如何获得具有正确值“宽度”、“高度”和“颜色”的 3 维输出?我知道神经网络中的值介于 0 和 1 之间,所以我不明白我们如何获得这些值? @Jeremy:这取决于您的值是像宽度/高度这样的数字还是标签,例如。用名称表示的颜色。如果它们是标签,那么您首先需要将它们表示为数字(可以像 0 代表红色和 1 代表绿色一样简单,或者更精确,例如转换为十六进制颜色的十进制表示)。现在,当所有输入都由数字表示时,您正在寻找的术语是规范化。归一化是数学过程,它允许您将任何数字范围“转换”到其他范围,例如。宽度范围从 50 - 250 到范围 0 - 1。以上是关于Keras 如何读取输入数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Keras 将输入和输出数据放入 Siamese Network?
使用 ImageDataGenerator 进行 Keras 数据增强(您的输入没有数据)