我试图根据图像和数值来预测数字。为了说明实际问题,我想说我试图在标准房价预测器中增加一个图像。因此,在其他功能(价格,平方米,没有房间等)中会有一个图像。因此,最终预测的价格将基于所提供的图像。以前是否实施过?另外,如何将图像与数字一起添加为特征?是否已有项目,我可以使用吗?
答案 0 :(得分:3)
我理解你的问题的方式:如何在预测房价时包含从照片中获取的信息?
这会让你:
一般的想法是使用预训练的ImageNet(此处为:VGG16)并在末尾删除一些层,尤其是将输出规范化为1000个类(BatchNormalization)并将该层替换为例如5个输出(参见上面的示例类)。
您可能需要数千个带注释的图像,您可以批量使用这些图像来重新训练现有网络(已修剪/更改过的VGG16)。
我不知道您使用的是哪种深度学习环境,https://keras.io和https://caffe2.ai将是目前最受欢迎的两种环境。两者都具有您在Model Zoo或存储库中提及的所有网络,并且具有ImageNet数据集的预先训练的权重。
重新训练DNN(并在测试图像集上获得足够高的准确度)后,您可以运行它以获得最佳拟合类,并将其用作下一个ML模型的一个输入,或者作为字符串/枚举(通过使用最好的)或5个数字,确定5个类别中的每个类别的DNN。
然后,您可以再次使用NN或基本上任何ML模型,如数据挖掘组页面上列出的PMML标准(http://dmg.org/pmml/v4-3/GeneralStructure.html)。
SciKit学习(https://en.wikipedia.org/wiki/Scikit-learn)有很多 - 如果你使用Python - 如果你的数据质量很好,随机森林或支持向量机应该会产生相当好的结果。
希望它有所帮助!
答案 1 :(得分:3)
你有两个任务。
1.获取图像中的要素作为最终预测任务的输入之一。或者将图像预测作为最终预测任务的输入。 2.接收到的特征提取或图像预测应作为另一个输入,以及其他数值输入,例如“平方英尺”,“卧室数量”等。
model = VGG16()
model.layers.pop()
model = Model(inputs=model.inputs, outputs=model.layers[-1].output)
for image_name in listdir(directory_of_images):
imagefile = path.join(directory_of_images, image_name)
image = load_img(imagefile, target_size=(224, 224))
image = img_to_array(image)
image = image.reshape((1, image.shape[0], image.shape[1], image.shape[2]))
image = preprocess_input(image)
feature = model.predict(image, verbose=0)
image_id = imagename.split('.')[0]
features[image_id] = feature
return features
将这些预测的功能作为您的其他输入列以及' numberOfBedroom',' square_feet_length'用于预测价格的值列。
答案 2 :(得分:0)
您可以从imagenet上预训练的任何标准卷积网(vgg16,vgg19或googlenet)中提取图像特征。 将图像功能与其他功能(价格,平方米,房间号等)连接起来,并将其用作mlp的输入来预测房价。