我有一些理论问题以及我的原始问题。
我是Keras的新手,有些逻辑问题。第一个问题是关于训练、测试等。我之前使用Sci-kit learn,通常使用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 mnistfrom keras import modelsfrom 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)
任何帮助都将非常受欢迎,因为我对这方面还很新手!
回答:
我之前使用Sci-kit learn,通常使用test_train_split库来做这件事(我假设我在这里也可以这样做?)
是的!这完全没问题
据我目前的理解,我们不能将字符串直接输入到神经网络中,因此需要进行某种形式的标准化处理。
正确。神经网络只是对数字进行大量数学运算的集合。话虽如此,你可以将字符串表示为数字(更多信息请Google word2vec)
特征向量中有5列(2列分类变量和3列数值变量)。我可以为2列分类变量创建虚拟变量,然后对整个特征向量进行标准化吗?
我假设你说的分类变量是指类别?类别永远不应该作为特征输入到网络中。这样做分类就没有意义了。如果你只是想进行预测,你可以查看model.predict
。
下面的示例代码来自图像识别。假设我想使用我自己的数据集,我需要事先知道input_shape并这样定义它吗?还是这是模型可以自己学习的东西?
神经网络是一系列矩阵乘法。你需要提供某些维度。它不需要预先知道批量大小(虽然你可以提供),但其他维度很重要:即输入层的特征数量。代码中的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关于深度学习的书。