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

Style Transfer error

Open alienatorZ opened this issue 5 years ago • 7 comments

Issue Description

Please describe your issue, along with:

  • expected behavior Run until execution finished.

  • encountered behavior Error stops execution.

Stack Trace: Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.CommandLineWrapper.main(CommandLineWrapper.java:66) Caused by: java.lang.RuntimeException: NativeOps::execPairwiseTransform both operands must have same data type; Expected: [DOUBLE]; Actual: [FLOAT] at org.nd4j.nativeblas.Nd4jCuda$NativeOps.execPairwiseTransform(Native Method) at org.nd4j.linalg.jcublas.ops.executioner.CudaExecutioner.invoke(CudaExecutioner.java:1420) at org.nd4j.linalg.jcublas.ops.executioner.CudaExecutioner.exec(CudaExecutioner.java:635) at org.nd4j.linalg.api.ndarray.BaseNDArray.addi(BaseNDArray.java:3818) at org.nd4j.linalg.api.ndarray.BaseNDArray.addi(BaseNDArray.java:3788) at org.deeplearning4j.examples.styletransfer.NeuralStyleTransfer.createCombinationImage(NeuralStyleTransfer.java:192) at org.deeplearning4j.examples.styletransfer.NeuralStyleTransfer.transferStyle(NeuralStyleTransfer.java:132) at org.deeplearning4j.examples.styletransfer.NeuralStyleTransfer.main(NeuralStyleTransfer.java:124) ... 5 more

Version Information

Please indicate relevant versions, including, if relevant:

  • Deeplearning4j version 1.0.0beta4
  • platform information (OS, etc) Windows 10
  • CUDA version, if used 10.1
  • NVIDIA driver version, if in use 430.86

Contributing

If you'd like to help us fix the issue by contributing some code, but would like guidance or help in doing so, please mention it!

alienatorZ avatar May 29 '19 17:05 alienatorZ

I'm having the same issue.

martinsbrn avatar Jun 30 '19 20:06 martinsbrn

/cc @klevis

saudet avatar Jul 16 '19 01:07 saudet

Hi,

May this could help ? https://github.com/eclipse/deeplearning4j/issues/7841

mohamad7788 avatar Aug 13 '19 15:08 mohamad7788

Transform both operands must have same data type; Expected: [DOUBLE]; Actual: [FLOAT] can be resolved with combination.muli(NOISE_RATION).addi(content.muli(1 - NOISE_RATION).castTo(DataType.DOUBLE)); at line 194.

However, after the change is made, I see a different exception which seems more serious:


Exception in thread "main" java.lang.IllegalStateException: Cannot perform backprop: Dropout mask array is absent (already cleared?)
	at org.nd4j.base.Preconditions.throwStateEx(Preconditions.java:641)
	at org.nd4j.base.Preconditions.checkState(Preconditions.java:268)
	at org.deeplearning4j.nn.conf.dropout.Dropout.backprop(Dropout.java:167)
	at org.deeplearning4j.nn.layers.AbstractLayer.backpropDropOutIfPresent(AbstractLayer.java:302)
	at org.deeplearning4j.nn.layers.convolution.ConvolutionLayer.backpropGradient(ConvolutionLayer.java:192)
	at org.deeplearning4j.examples.styletransfer.NeuralStyleTransfer.backPropagate(NeuralStyleTransfer.java:292)
	at org.deeplearning4j.examples.styletransfer.NeuralStyleTransfer.backPropagateStyles(NeuralStyleTransfer.java:170)
	at org.deeplearning4j.examples.styletransfer.NeuralStyleTransfer.transferStyle(NeuralStyleTransfer.java:145)
	at org.deeplearning4j.examples.styletransfer.NeuralStyleTransfer.main(NeuralStyleTransfer.java:126)

Any thoughts on how to fix that? Does this mean the layers list/order is incorrect?

vera-dobryanskaya avatar Aug 29 '19 02:08 vera-dobryanskaya

Ok, I kind of was able to run the style transfer example, but at this point I'm not sure if it is mathematically correct/efficient. Here is the patch content / intellij 2019.2:

Index: dl4j-examples/src/main/java/org/deeplearning4j/examples/styletransfer/NeuralStyleTransfer.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- dl4j-examples/src/main/java/org/deeplearning4j/examples/styletransfer/NeuralStyleTransfer.java	(revision 20225a8a70b8932677538d55be55ccacafa01333)
+++ dl4j-examples/src/main/java/org/deeplearning4j/examples/styletransfer/NeuralStyleTransfer.java	(date 1567049714186)
@@ -19,11 +19,13 @@
 import org.datavec.image.loader.NativeImageLoader;
 import org.deeplearning4j.examples.download.DownloaderUtility;
 import org.deeplearning4j.nn.api.Layer;
+import org.deeplearning4j.nn.conf.dropout.IDropout;
 import org.deeplearning4j.nn.graph.ComputationGraph;
 import org.deeplearning4j.nn.workspace.LayerWorkspaceMgr;
 import org.deeplearning4j.zoo.PretrainedType;
 import org.deeplearning4j.zoo.ZooModel;
 import org.deeplearning4j.zoo.model.VGG16;
+import org.nd4j.linalg.api.buffer.DataType;
 import org.nd4j.linalg.api.ndarray.INDArray;
 import org.nd4j.linalg.dataset.api.preprocessor.DataNormalization;
 import org.nd4j.linalg.dataset.api.preprocessor.VGG16ImagePreProcessor;
@@ -145,7 +147,7 @@
             INDArray backPropContent = backPropagateContent(vgg16FineTune, activationsContentMap, activationsCombMap);
             INDArray backPropAllValues = backPropContent.muli(ALPHA).addi(styleBackProb.muli(BETA));
             adamUpdater.applyUpdater(backPropAllValues, iteration, 0);
-            combination.subi(backPropAllValues);
+            combination.subi(backPropAllValues.castTo(DataType.DOUBLE));
 
             log.info("Total Loss: " + totalLoss(activationsStyleMap, activationsCombMap, activationsContentMap));
             if (iteration % SAVE_IMAGE_CHECKPOINT == 0) {
@@ -190,7 +192,7 @@
         INDArray content = LOADER.asMatrix(new File(dataLocalPath,CONTENT_FILE));
         IMAGE_PRE_PROCESSOR.transform(content);
         INDArray combination = createCombineImageWithRandomPixels();
-        combination.muli(NOISE_RATION).addi(content.muli(1 - NOISE_RATION));
+        combination.muli(NOISE_RATION).addi(content.muli(1 - NOISE_RATION).castTo(DataType.DOUBLE));
         return combination;
     }
 
@@ -288,7 +290,17 @@
 
         for (int i = startFrom; i > 0; i--) {
             Layer layer = vgg16FineTune.getLayer(ALL_LAYERS[i]);
-            dLdANext = layer.backpropGradient(dLdANext, LayerWorkspaceMgr.noWorkspaces()).getSecond();
+            org.deeplearning4j.nn.conf.layers.Layer conf = (org.deeplearning4j.nn.conf.layers.Layer)layer.getConfig();
+
+            try {
+
+                ((org.deeplearning4j.nn.conf.layers.Layer) layer.getConfig()).setIDropout(null);
+
+                dLdANext = layer.backpropGradient(dLdANext, LayerWorkspaceMgr.noWorkspaces())
+                                .getSecond();
+            }catch (Exception e){
+                log.error("Error {} => {}", layer.getConfig().getClass().getSimpleName(), layer.getConfig().getLayerName(), e);
+            }
         }
         return dLdANext;
     }

 

vera-dobryanskaya avatar Aug 29 '19 04:08 vera-dobryanskaya

@AlexDBlack What do you think?

saudet avatar Aug 29 '19 06:08 saudet

This issue still open. I was able to do style transfer just fine with the diff fix, even on other works(custom drawings). So, should I create an MR for my fix from above?

Thank you vera-dobryanskaya

verunder avatar Oct 02 '19 14:10 verunder