Skip to content

Instantly share code, notes, and snippets.

@AlexDBlack
Created October 23, 2019 12:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AlexDBlack/abb3bf0a6f4f384863fa467f498447a4 to your computer and use it in GitHub Desktop.
Save AlexDBlack/abb3bf0a6f4f384863fa467f498447a4 to your computer and use it in GitHub Desktop.
import org.datavec.image.loader.NativeImageLoader;
import org.deeplearning4j.nn.graph.ComputationGraph;
import org.junit.Test;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.ops.transforms.Transforms;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public class Debug8298_2 {
@Test
public void test() throws Exception {
File f = new File("C:\\Temp\\Issue8298\\model.h5");
ComputationGraph model = KerasModelImport.importKerasModelAndWeights(f.getAbsolutePath(), false);
// System.out.println(model.summary());
NativeImageLoader nil = new NativeImageLoader(256, 256, 1);
File imgF = new File("C:\\Temp\\Issue8298\\n8DQ5.png");
// INDArray arr = nil.asMatrix(imgF);
// arr.divi(255);
INDArray arr = Nd4j.createFromNpyFile(new File("C:/Temp/Issue8298/layer0.npy"))
.permute(0, 3, 1, 2); //NHWC to NCHW
INDArray out = model.output(arr)[0];
List<String> layerNames = Arrays.asList("input_1", "conv2d_1", "conv2d_2", "max_pooling2d_1", "conv2d_3", "conv2d_4",
"max_pooling2d_2", "conv2d_5", "conv2d_6", "max_pooling2d_3", "conv2d_7", "conv2d_8", "max_pooling2d_4",
"conv2d_9", "conv2d_10", "conv2d_transpose_1", "concatenate_1", "conv2d_11", "conv2d_12", "conv2d_transpose_2",
"concatenate_2", "conv2d_13", "conv2d_14", "conv2d_transpose_3", "concatenate_3", "conv2d_15", "conv2d_16",
"conv2d_transpose_4", "concatenate_4", "conv2d_17", "conv2d_18", "conv2d_19");
Map<String,INDArray> acts = model.feedForward(arr, false);
//Compare layers
for( int i=0; i<=31; i++ ) {
INDArray dl4j = acts.get(layerNames.get(i));
INDArray keras = Nd4j.createFromNpyFile(new File("C:/Temp/Issue8298/layer" + i + ".npy"))
.permute(0, 3, 1, 2); //NHWC to NCHW
INDArray absDiff2 = Transforms.abs(dl4j.sub(keras));
double dMin = absDiff2.minNumber().doubleValue();
double dMax = absDiff2.maxNumber().doubleValue();
double dMean = absDiff2.meanNumber().doubleValue();
System.out.println(layerNames.get(i) + " - minDiff=" + dMin + ", maxDiff=" + dMax + ", meanDiff=" + dMean);
}
Thread.sleep(100000);
}
private BufferedImage toBI(INDArray arr){
int h = (int)arr.size(2);
int w = (int)arr.size(3);
BufferedImage bi = new BufferedImage(h, w, BufferedImage.TYPE_BYTE_GRAY);
int[] ia = new int[1];
for( int i=0; i<h; i++ ){
for( int j=0; j<w; j++ ){
int value = (int)(255 * arr.getDouble(0, 0, i, j));
ia[0] = value;
bi.getRaster().setPixel(i,j,ia);
}
}
return bi;
}
}
#Get intermediate layer outputs for testing
from keras import backend as K
for i in range(0,len(model.layers)):
# print(i," - ",model.layers[i])
print(model.layers[i].name)
getLayerOut = K.function([model.layers[0].input], [model.layers[i].output])
act = getLayerOut([img_array])[0]
np.save("C:/Temp/Issue8298/layer" + str(i) + ".npy", act)
input_1 - minDiff=0.0, maxDiff=0.0, meanDiff=0.0
conv2d_1 - minDiff=0.0, maxDiff=0.0, meanDiff=0.0
conv2d_2 - minDiff=0.0, maxDiff=1.7881393432617188E-7, meanDiff=5.615447218332292E-9
max_pooling2d_1 - minDiff=0.0, maxDiff=1.7881393432617188E-7, meanDiff=5.884208231776711E-9
conv2d_3 - minDiff=0.0, maxDiff=2.086162567138672E-7, meanDiff=7.56350981845344E-9
conv2d_4 - minDiff=0.0, maxDiff=2.682209014892578E-7, meanDiff=8.052793099011524E-9
max_pooling2d_2 - minDiff=0.0, maxDiff=2.384185791015625E-7, meanDiff=8.62923776878688E-9
conv2d_5 - minDiff=0.0, maxDiff=2.980232238769531E-7, meanDiff=8.403304718740401E-9
conv2d_6 - minDiff=0.0, maxDiff=4.76837158203125E-7, meanDiff=9.471509798686384E-9
max_pooling2d_3 - minDiff=0.0, maxDiff=4.76837158203125E-7, meanDiff=1.022646234360991E-8
conv2d_7 - minDiff=0.0, maxDiff=3.5762786865234375E-7, meanDiff=1.4740077602937163E-8
conv2d_8 - minDiff=0.0, maxDiff=3.129243850708008E-7, meanDiff=1.589685538760932E-8
max_pooling2d_4 - minDiff=0.0, maxDiff=2.980232238769531E-7, meanDiff=1.778846048239302E-8
conv2d_9 - minDiff=0.0, maxDiff=2.0489096641540527E-7, meanDiff=1.2144754535370339E-8
conv2d_10 - minDiff=0.0, maxDiff=1.685693860054016E-7, meanDiff=9.175788129311968E-9
conv2d_transpose_1 - minDiff=1.771841198205948E-5, maxDiff=0.07175328582525253, meanDiff=0.019567932933568954
concatenate_1 - minDiff=0.0, maxDiff=0.07175328582525253, meanDiff=3.815795935224742E-5
conv2d_11 - minDiff=0.0, maxDiff=0.006445556879043579, meanDiff=3.882590972352773E-4
conv2d_12 - minDiff=0.0, maxDiff=0.004175890237092972, meanDiff=2.9162911232560873E-4
conv2d_transpose_2 - minDiff=1.4215707778930664E-5, maxDiff=0.08904879540205002, meanDiff=0.01881953701376915
concatenate_2 - minDiff=0.0, maxDiff=0.08904879540205002, meanDiff=7.323535101022571E-5
conv2d_13 - minDiff=0.0, maxDiff=0.010558664798736572, meanDiff=4.790271632373333E-4
conv2d_14 - minDiff=0.0, maxDiff=0.005903095006942749, meanDiff=2.6060862001031637E-4
conv2d_transpose_3 - minDiff=0.0012276172637939453, maxDiff=3.0291857719421387, meanDiff=0.9767823815345764
concatenate_3 - minDiff=0.0, maxDiff=3.0291857719421387, meanDiff=0.0075719621963799
conv2d_15 - minDiff=0.0, maxDiff=0.5936927199363708, meanDiff=0.02738197334110737
conv2d_16 - minDiff=0.0, maxDiff=0.7889971137046814, meanDiff=0.025784380733966827
conv2d_transpose_4 - minDiff=1.0954216122627258E-5, maxDiff=1.3733571767807007, meanDiff=0.18237584829330444
concatenate_4 - minDiff=0.0, maxDiff=1.3733571767807007, meanDiff=0.002805784810334444
conv2d_17 - minDiff=0.0, maxDiff=0.504451334476471, meanDiff=0.015782883390784264
conv2d_18 - minDiff=0.0, maxDiff=1.0007266998291016, meanDiff=0.033338483422994614
conv2d_19 - minDiff=0.0, maxDiff=0.436945378780365, meanDiff=0.02707871049642563
input_1 - minDiff=0.0, maxDiff=0.0627451241016388, meanDiff=0.002404714934527874
conv2d_1 - minDiff=0.0, maxDiff=0.016053058207035065, meanDiff=3.1611177837476134E-4
conv2d_2 - minDiff=0.0, maxDiff=0.015516549348831177, meanDiff=2.460672112647444E-4
max_pooling2d_1 - minDiff=0.0, maxDiff=0.012729927897453308, meanDiff=2.5856404681690037E-4
conv2d_3 - minDiff=0.0, maxDiff=0.00826062262058258, meanDiff=1.9067789253313094E-4
conv2d_4 - minDiff=0.0, maxDiff=0.009111076593399048, meanDiff=1.3653974747285247E-4
max_pooling2d_2 - minDiff=0.0, maxDiff=0.008830636739730835, meanDiff=1.5535287093371153E-4
conv2d_5 - minDiff=0.0, maxDiff=0.0064404308795928955, meanDiff=9.580652113072574E-5
conv2d_6 - minDiff=0.0, maxDiff=0.010544538497924805, meanDiff=8.993090887088329E-5
max_pooling2d_3 - minDiff=0.0, maxDiff=0.010544538497924805, meanDiff=9.956357826013118E-5
conv2d_7 - minDiff=0.0, maxDiff=0.004548102617263794, meanDiff=8.270094986073673E-5
conv2d_8 - minDiff=0.0, maxDiff=0.002923130989074707, meanDiff=5.933983629802242E-5
max_pooling2d_4 - minDiff=0.0, maxDiff=0.002923130989074707, meanDiff=6.988436507526785E-5
conv2d_9 - minDiff=0.0, maxDiff=0.0014529228210449219, meanDiff=3.969607860199176E-5
conv2d_10 - minDiff=0.0, maxDiff=8.989050984382629E-4, meanDiff=2.6088982849614695E-5
conv2d_transpose_1 - minDiff=1.771841198205948E-5, maxDiff=0.0717519000172615, meanDiff=0.01956917718052864
concatenate_1 - minDiff=0.0, maxDiff=0.0717519000172615, meanDiff=9.737079381011426E-5
conv2d_11 - minDiff=0.0, maxDiff=0.006409257650375366, meanDiff=3.9194306009449065E-4
conv2d_12 - minDiff=0.0, maxDiff=0.00422210618853569, meanDiff=2.9425480170175433E-4
conv2d_transpose_2 - minDiff=1.4215707778930664E-5, maxDiff=0.08904879540205002, meanDiff=0.018820419907569885
concatenate_2 - minDiff=0.0, maxDiff=0.08904879540205002, meanDiff=1.6281205171253532E-4
conv2d_13 - minDiff=0.0, maxDiff=0.013077497482299805, meanDiff=5.123941227793694E-4
conv2d_14 - minDiff=0.0, maxDiff=0.019526124000549316, meanDiff=3.606657264754176E-4
conv2d_transpose_3 - minDiff=4.5299530029296875E-4, maxDiff=3.0291857719421387, meanDiff=0.9768602252006531
concatenate_3 - minDiff=0.0, maxDiff=3.0291857719421387, meanDiff=0.00770680233836174
conv2d_15 - minDiff=0.0, maxDiff=0.5939894914627075, meanDiff=0.02738945186138153
conv2d_16 - minDiff=0.0, maxDiff=0.7896089553833008, meanDiff=0.025801436975598335
conv2d_transpose_4 - minDiff=1.0954216122627258E-5, maxDiff=1.3742644786834717, meanDiff=0.18236181139945984
concatenate_4 - minDiff=0.0, maxDiff=1.3742644786834717, meanDiff=0.0030477973632514477
conv2d_17 - minDiff=0.0, maxDiff=0.5036077499389648, meanDiff=0.015790363773703575
conv2d_18 - minDiff=0.0, maxDiff=1.0023407936096191, meanDiff=0.03334825485944748
conv2d_19 - minDiff=1.1920928955078125E-7, maxDiff=0.4378690719604492, meanDiff=0.027073457837104797
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment