首页 > 解决方案 > 在神经网络中实现用户输入

问题描述

除了我原来的问题,我还有一些理论问题。

我对 Keras 很陌生,并且有一些逻辑问题。第一个问题是关于火车、测试等。我来自使用 Sci-kit 学习,通常使用 test_train_split 库来执行此操作(我假设我可以在这里做同样的事情?)

我的下一个问题是特征和标签的转换。据我目前的理解,我们无法将字符串输入神经网络,因此必须进行某种规范化。

我学习了分类变量的标记化或虚拟变量,应该对数值进行标准化。我的问题是:特征向量中有 5 列(2 个分类和 3 个数字)。我可以为 2 个分类创建虚拟变量,然后对整个特征向量进行归一化吗?

在此之后,我的问题将在下面的代码中关于 input_shape(x, y)。下面的示例代码来自图像识别。假设我想使用自己的数据集,我是否必须事先知道 input_shape 并以这种方式定义它?或者这是模型可以自己学习的东西?

我的最后一个问题是:假设特征向量由变量 a、b、c 和 d 组成。如何让用户输入他们的 a、b、c 和 d 值并让模型给出输出?在示例中,模型从 CSV 加载到数据框中,然后我将该数据用于测试和训练特征和标签。在这种情况下,我是否需要将用户变量存储到数据框中以便模型预测输出?

我所指的代码是用于图像的,但我的用例不是图像而是整数。代码:

from keras.datasets import mnist
from keras import models
from keras import layers

(train_images, train_labels), (test_images, test_labels) = mnist.load_data()

model = model.Sequential()
model.add(layers.Dense(16, activation = 'relu', input_shape = (10000,)))
model.add(layers.Dense(16, activation = 'relu'))
model.add(layers.Dense(1, activation = 'sigmoid'))

model.compile(optimizer= 'rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(train_images, train_labels, epochs=5, batch_size=64)

test_loss, test_acc = model.evaluate(test_images, test_labels)

任何帮助都会很棒,因为我对此很陌生!

标签: pythontensorflowmachine-learningneural-networkkeras

解决方案


我来自使用 Sci-kit learn 并且通常使用 test_train_split 库来做到这一点(我假设我可以在这里做同样的事情?)

是的!根本不应该

据我目前的理解,我们无法将字符串输入神经网络,因此必须进行某种规范化。

正确的。神经网络只是对数字的大量数学运算。话虽如此,您可以将字符串表示为数字(Google word2vec 了解更多信息)

[T] 特征向量中有 5 列(2 个分类和 3 个数值)。我可以为 2 个分类创建虚拟变量,然后对整个特征向量进行归一化吗?

我会假设通过分类,你的意思是类?这些类永远不会作为特征进入网络。那么分类就没有任何意义了。如果你只是想做预测,你可以看看model.predict.

下面的示例代码来自图像识别。假设我想使用自己的数据集,我是否必须事先知道 input_shape 并以这种方式定义它?或者这是模型可以自己学习的东西?

神经网络是一堆矩阵乘法。您需要提供一些尺寸。它不需要对 batch_size 的先验知识(尽管你可以给出它),但其他维度很重要:即输入层中的特征数量。代码中的input_shape = (10000,)只是 的简写input_shape = (10000,None)None您可以在哪里放置批量大小(数据点数)。在这种10000情况下,是特征的数量。

如何让用户输入他们的 a、b、c 和 d 值并让模型给出输出?

请注意,关键是您事先不知道输出。

oneToFive=input("Enter 5 numbers separated by commas")
oneToFive=oneToFive.split(",")
oneToFive=[np.float32(c) for c in oneToFive]
model.predict(x=np.array(oneToFive))

我建议你研究一下这背后的理论。只是盲目地跑来跑去可能会很烦人,因为你很难获得好的结果。即使你取得了好的结果,它们也可能往往不如你想象的那么好。一个可以阅读的地方是Ian Goodfellow 关于深度学习的书


推荐阅读