在神经网络中实现用户输入

时间:2018-06-29 22:26:14

标签: python tensorflow machine-learning neural-network keras

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

我对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)

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

1 个答案:

答案 0 :(得分:1)

  

我来自使用Sci-kit学习,通常使用test_train_split库执行此操作(我假设我可以在这里做同样的事情?)

是的!没关系

  

到目前为止,根据我的理解,我们无法将字符串输入神经网络,因此必须进行某种形式的标准化。

正确。神经网络只是数字上的全部数学运算。话虽如此,您可以将字符串表示为数字(有关更多信息,请使用Google word2vec)

  

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

我认为按类别,您是指类?这些类永远不会作为功能进入网络。然后分类将毫无意义。如果您只想进行预测,则可以看看model.predict

  

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

神经网络是一堆矩阵乘法。您需要提供尺寸的 some 。它不需要对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's book on deep learning是一个值得阅读的地方。