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?

python 图片读取 常用操作方法

keras数据集读取

使用 ImageDataGenerator 进行 Keras 数据增强(您的输入没有数据)

如何格式化从keras转换的coreml中conv1d/lstm nn的输入数据

tf.keras 用生成器读取图片数据+预处理