deeplearning4j-examples icon indicating copy to clipboard operation
deeplearning4j-examples copied to clipboard

RL4J Malmo Pixels example not working

Open phong-phuong opened this issue 4 years ago • 1 comments

Deeplearning4j version: 1.0.0-beta-7

Issue Description:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid size: cannot get size of dimension 2 for rank 1 NDArray

The observation "MalmoBox" is a rank 1 array of double while QLearningDiscreteConv expects a rank 3 array.

So that was any fix, I created a custom observation class for game pixel data,and passed a rank 3 array in the form of [x * y pixels * channels, 1, 1] - that's the only configuration that work, but then I get an out of bounds error.

Rank: 3, DataType: DOUBLE, Offset: 0, Order: c, Shape: [1200,1,1], Stride: [1,1,1] Exception in thread "main" java.lang.IndexOutOfBoundsException: 176 at org.bytedeco.javacpp.indexer.Indexer.checkIndex(Indexer.java:94) at org.bytedeco.javacpp.indexer.UByteRawIndexer.put(UByteRawIndexer.java:95) at org.bytedeco.javacpp.indexer.UByteRawIndexer.put(UByteRawIndexer.java:119) at org.bytedeco.javacpp.indexer.UByteIndexer.putDouble(UByteIndexer.java:146) at org.bytedeco.javacpp.indexer.UByteIndexer.putDouble(UByteIndexer.java:33) at org.datavec.image.loader.NativeImageLoader.asMat(NativeImageLoader.java:846) at org.datavec.image.loader.NativeImageLoader.asFrame(NativeImageLoader.java:775) at org.deeplearning4j.rl4j.observation.transform.legacy.EncodableToImageWritableTransform.transform(EncodableToImageWritableTransform.java:43) at org.deeplearning4j.rl4j.observation.transform.legacy.EncodableToImageWritableTransform.transform(EncodableToImageWritableTransform.java:37) at org.deeplearning4j.rl4j.observation.transform.TransformProcess.transform(TransformProcess.java:106) at org.deeplearning4j.rl4j.util.LegacyMDPWrapper.reset(LegacyMDPWrapper.java:118) at org.deeplearning4j.rl4j.learning.sync.qlearning.QLearning.refacInitMdp(QLearning.java:158) at org.deeplearning4j.rl4j.learning.sync.qlearning.QLearning.trainEpoch(QLearning.java:94) at org.deeplearning4j.rl4j.learning.sync.SyncLearning.train(SyncLearning.java:96)

phong-phuong avatar Jun 11 '20 08:06 phong-phuong

Finally got Minecraft properly installed.

There are two issues, one is one or more arguments used in FFmpegFrameRecorder cause it to error upon starting. Height not divible by 2?

org.bytedeco.javacv.FrameRecorder$Exception: avcodec_open2() error -542398533: Could not open video codec. at org.bytedeco.javacv.FFmpegFrameRecorder.startUnsafe(FFmpegFrameRecorder.java:743) at org.bytedeco.javacv.FFmpegFrameRecorder.start(FFmpegFrameRecorder.java:401) at org.deeplearning4j.rl4j.util.VideoRecorder.startRecording(VideoRecorder.java:92) at org.deeplearning4j.rl4j.learning.HistoryProcessor.startMonitor(HistoryProcessor.java:70) at org.deeplearning4j.rl4j.util.DataManagerTrainingListener.onNewEpoch(DataManagerTrainingListener.java:44) at org.deeplearning4j.rl4j.learning.listener.TrainingListenerList.notifyNewEpoch(TrainingListenerList.java:71) at org.deeplearning4j.rl4j.learning.sync.SyncLearning.train(SyncLearning.java:91) at rl4j.MalmoPixels.malmoCliffWalk(MalmoPixels.java:125) at l4j.MalmoPixels.main(MalmoPixels.java:69) 20:39:30.296 [main] INFO org.deeplearning4j.malmo.MalmoEnv - Waiting for the mission to start java.lang.IllegalArgumentException: Invalid size: cannot get size of dimension 2 for rank 1 NDArray (array shape: [230400]) at org.nd4j.linalg.api.ndarray.BaseNDArray.size(BaseNDArray.java:4510) at org.datavec.image.loader.NativeImageLoader.asMat(NativeImageLoader.java:799) at org.datavec.image.loader.NativeImageLoader.asFrame(NativeImageLoader.java:775) at org.deeplearning4j.rl4j.util.VideoRecorder.record(VideoRecorder.java:113) at org.deeplearning4j.rl4j.learning.HistoryProcessor.record(HistoryProcessor.java:96) at org.deeplearning4j.rl4j.util.LegacyMDPWrapper.record(LegacyMDPWrapper.java:145) at org.deeplearning4j.rl4j.util.LegacyMDPWrapper.reset(LegacyMDPWrapper.java:111) at org.deeplearning4j.rl4j.learning.sync.qlearning.QLearning.refacInitMdp(QLearning.java:158) at org.deeplearning4j.rl4j.learning.sync.qlearning.QLearning.trainEpoch(QLearning.java:94) at org.deeplearning4j.rl4j.learning.sync.SyncLearning.train(SyncLearning.java:96) at rl4j.MalmoPixels.malmoCliffWalk(MalmoPixels.java:125) at rl4j.MalmoPixels.main(MalmoPixels.java:69)

Second is the issue I described earlier in the origial post.

Exception in thread "main" java.lang.IllegalArgumentException: Invalid size: cannot get size of dimension 2 for rank 1 NDArray (array shape: [230400]) at org.nd4j.linalg.api.ndarray.BaseNDArray.size(BaseNDArray.java:4510) at org.datavec.image.loader.NativeImageLoader.asMat(NativeImageLoader.java:799) at org.datavec.image.loader.NativeImageLoader.asFrame(NativeImageLoader.java:775) at org.deeplearning4j.rl4j.observation.transform.legacy.EncodableToImageWritableTransform.transform(EncodableToImageWritableTransform.java:43) at org.deeplearning4j.rl4j.observation.transform.legacy.EncodableToImageWritableTransform.transform(EncodableToImageWritableTransform.java:37) at org.deeplearning4j.rl4j.observation.transform.TransformProcess.transform(TransformProcess.java:106) at org.deeplearning4j.rl4j.util.LegacyMDPWrapper.reset(LegacyMDPWrapper.java:118) at org.deeplearning4j.rl4j.learning.sync.qlearning.QLearning.refacInitMdp(QLearning.java:158) at org.deeplearning4j.rl4j.learning.sync.qlearning.QLearning.trainEpoch(QLearning.java:94) at org.deeplearning4j.rl4j.learning.sync.SyncLearning.train(SyncLearning.java:96) at rl4j.MalmoPixels.malmoCliffWalk(MalmoPixels.java:125) at rl4j.MalmoPixels.main(MalmoPixels.java:69) [libx264 @ 0000000137a32940] -qscale is ignored, -crf is recommended. [libx264 @ 0000000137a32940] height not divisible by 2 (4x427)

phong-phuong avatar Jun 11 '20 10:06 phong-phuong