我最近下载了Deeplearning for Java(DL4J),现在正在尝试使用卷积网络。我在主页和互联网上找到了一些工作样本,例如如何对图像进行分类,即识别面部。我大致了解如何读取训练数据,并且图像标有网应识别的正确标签(“Barack Obama - Picture 1”)。但是,从这里开始我有点卡住了。我无法理解输出。与http://deeplearning4j.org/image-data-pipeline中描述的一样,我们使用ImageRecordReader读取图像并从中创建训练数据。但是,例如,程序如何知道将一个图像分类为“barack obama”而不是“barack obama - 样本图片1”?或者网络做到了吗?我不这么认为。 我的下一个问题是将应用程序更改为不仅仅识别一个对象,而且还要评估图像,就像在AlphaGo中评估表示为图像的板位置一样。那我怎么输入数据呢?我可以用他们的分数来标记例如训练委员会状态......但我不知道这是不是很好。 我希望这是可以理解的,帮助和最小的样本将不胜感激!
谢谢你,祝你有个美好的一天 奥利弗
答案 0 :(得分:0)
您引用的示例使用野外标记面数据集,该数据集具有以下文件夹结构:
lfw
├── Aaron_Eckhart
├── Aaron_Guiel
├── Aaron_Patterson
│ ├── Aaron_Patterson_0001.jpg
ImageRecordReader
类扩展了抽象BaseImageRecordReader
类,它在initialize()
方法中使用以下行(131-134)来创建标签数组:
File parentDir = imgFile.getParentFile();
String name = parentDir.getName();
if(!labels.contains(name))
labels.add(name);
换句话说,它不使用JPEG文件的名称,而是使用其父文件夹的名称。
至于你的第二个问题:
我的下一个问题是将应用程序更改为不仅仅识别一个对象,而且还要评估图像,就像在AlphaGo中评估表示为图像的板位置一样。 [...]我可以用他们的分数来标记训练委员会状态......但我不知道这是不是很好。
我建议从阅读以下论文开始: http://www.nature.com/nature/journal/v529/n7587/fig_tab/nature16961_F1.html,以及以下大纲:https://www.tastehit.com/blog/google-deepmind-alphago-how-it-works/(特别是从AlphaGo部分开始)。
AlphaGo依赖于两个不同的组件:树搜索过程和指导树搜索过程的卷积网络。 [...]总共训练了三种卷积网络,分为两种:两种策略网络和一种价值网络。两种类型的网络都将当前游戏状态视为输入,表示为图像。
[..]
价值网络提供了对游戏当前状态值的估计:在给定当前状态的情况下,黑人玩家最终赢得游戏的概率是多少?价值网络的输入是整个游戏板,输出是一个数字,表示获胜的概率。
根据游戏的当前状态,政策网络提供有关选择哪种行动的指导。输出是每个可能的合法移动的概率值(即,网络的输出与板一样大)。具有较高概率值的动作(移动)对应于具有较高机会导致获胜的动作。