我在训练神经网络进行图像分类时遇到了问题。基于NN的表现,它似乎没有学习。
我基本上在encog-examples(ImageNeuralNetwork)中运行给定的程序来分类一组图像。以下是示例程序输出
Training set created
Added input image:./faces/at33_straight_neutral_open.png; identity: shadesNone
Added input image:./faces/night/night_up_happy_sunglasses_4.png; identity: shades
...<more files here>...
Added input image:./faces/cheyer/cheyer_up_neutral_open_4.png; identity: shadesNone
Downsampling images...
Created network: [BasicNetwork: Layers=3]
Training Beginning... Output patterns=2
Beginning training...
Iteration #1 Error:199.591952% elapsed time = 00:00:00 time left = 00:01:00
Iteration #2 Error:196.384178% elapsed time = 00:00:00 time left = 00:01:00
Iteration #3 Error:160.422574% elapsed time = 00:00:00 time left = 00:01:00
...
Iteration #16 Error:99.733657% elapsed time = 00:00:00 time left = 00:01:00
...
Iteration #202 Error:99.489796% elapsed time = 00:00:04 time left = 00:01:00
...
Iteration #203 Error:199.605091% elapsed time = 00:00:04 time left = 00:01:00
如您所见,NN从接近200%的误差振荡到接近100%的误差。 首先,我甚至不确定是否可能出现100%以上的误差,更不用说200%了。
下面是我的输入文件,其中包含NN的命令和参数:
CreateTraining: width:16,height:15,type:Brightness
Input: image:./faces/at33_straight_neutral_open.png, identity:shadesNone
Input: image:./faces/night/night_up_happy_sunglasses_4.png, identity:shades
Input: image:./faces/choon/choon_up_angry_open_4.png, identity:shadesNone
Input: image:./faces/cheyer/cheyer_left_angry_sunglasses_4.png, identity:shades
<more files...>
Network: hidden1:10, hidden2:10
Train: Mode:console, Minutes:1, StrategyError:0.25, StrategyCycles:100
Whatis: image:./faces/tammo/tammo_right_sad_sunglasses_4.png
<more files...>
我最初的猜测是实际图像或理想值没有正确地输入到NN,但我检查了输入(例如输出图像和我读过的理想值),它们都没问题。
现在我的预感是,某些目录(可能是java库或读取输入文件的位置)未正确设置。以下是我的Eclipse运行配置:
Classpath Tab
Bootstrap Entries
JRE System Library [jre7]
User Entries
encog-examples (default classpath)
encog-examples
encog-core-3.2.0-SNAPSHOT.jar \encog-examples\lib
顺便说一下,我还不能正确运行Forest Cover示例(需要输入文件),而我可以运行Lunar Lander和XOR示例(不需要输入文件)。这加强了我的假设,即我的问题与目录有关。
非常感谢任何帮助。感谢。
答案 0 :(得分:1)
忽略我上面的帖子,3.2.0工作正常。
我遇到了像 newind27 这样的问题,网络似乎没有学到任何东西,而且错误的变化正在疯狂。经过一番研究后,我发现有点讨厌白色太多的图片。
对我有用的解决方案是降低用于网络学习的图片的亮度。一种方法(在不破坏原始图像的过程中)使用带有BufferedImage的RescaleOp类。
其他可能(未经测试)的解决方案可能是在学习过程中改变正在被送到网络的图像的顺序。
答案 1 :(得分:0)
似乎是3.2.0的bug,有同样的问题 尝试用3.1.0训练网络,应该修复它