我对机器学习和神经网络完全是初学者。目前我在做一个项目,项目中我有很多图片存储在MongoDB数据库中。每张图片都有一个从0到1的数字。例如,“图片1”的数字是0.71。
我想根据数据库来训练我的模型。项目的主要目标是,在模型完成训练后,给定一张图片,模型能够返回(预测)一个从0到1的数字。经过一些研究和询问了一些人后,我了解到一些对项目有用的库:TensorFlow和Keras。有些人告诉我这是不可能的,但我不是很确定,所以我来这里询问。
所以我的问题是:这是可能的吗?如果可以,我该如何实现?您推荐使用哪些特定的工具?如果您为我的项目指定了一种方法,我需要以某种形式导出我的MongoDB数据库吗?因为我是初学者,也许您认为有一些教程可以帮助我?
如果这个问题有点太笼统了,或者有任何误解,请评论,我会尽力回答。提前感谢!
回答:
你想做的事情完全是可行的,这种类型的项目被称为回归,由于你使用的是图像数据,最好的模型类型被称为卷积神经网络(CNN),如果你想构建自己的模型,你需要一些理解。我做过一个项目,需要使用图像预测细菌菌落的数量,这与你的问题很相似,只是我对预测值没有界限。
CNN是什么?这里有一个链接
基本上,CNN会理解图像中的特征,并使用这些特征来预测一个值。
你不需要创建自己的模型,大多数人只是使用科学文献中设计良好的模型。
选择Keras,这是最简单的框架,效果很好。这里是如何实现VGG16(一个可能最适合你问题的架构)的方法:链接
你应该按照这个教程开始使用Keras进行开发。
最后一个提示:不要使用VGG16实现中的最后一层,使用一个带有一个神经元的Dense层,并使用sigmoid/linear/leaky relu激活函数。
即:
#model.add(Dense(1000, activation='softmax'))model.add(Dense(1, activation='sigmoid'))
这意味着:预测1
个数字(sigmoid会将其限制在0和1之间,但也许lrelu或linear更好)
另外,我猜你可以使用MongoDB来读取图像作为数组,但我建议只是将图像放在一个文件夹中。
编辑:在编译模型时,使用均方误差
,如
adam = keras.optimizers.Adam(lr=1e-4)model.compile(optimizer=adam, loss='mse')