# An implementation of data dimension reduction and restoration in Keras with tensorflow as Backend

### Data Dimension Reduction

In neural network for points cloud data and temporal data along with the emerging graph convolution nerual network, data dimension reduction is a essential step in calculation graph. However, there is no explicit example code online can be used as template. I will introduce a few lines as a simple implementation in Keras with tensorflow as backend. So, be careful with your framework before a straight copy.

```
import tensorflow as tf
import numpy as np
from keras import backend as K
from keras.layers.core import Reshape
shape = (10,3,3,1)
img = np.zeros(shape)
for i in range(0,3):
for j in range(0,3):
img[:,i,j,0] = i*3+j
sess = tf.InteractiveSession()
a = tf.Print(img, [img], message="This is img: ") # convert numpy.ndarray to tensor
a_re = Reshape((a.shape[1]*a.shape[2],1,1))(a) # a_re.shape = (10,9,1,1)
print(a_re.shape)
a_sq = tf.squeeze(a_re,[2]) # a_sq.shape = (10,9,1)
print(a_sq.shape)
```

### Data Dimension Restoration

In segmentation application, sometimes we need restore data to origin shape after data dimension reduction.
Following the above lines, `a_sq`

can convert to original shape.

```
a_bk = Reshape((a.shape[1],a.shape[2],a.shape[3]))(a_sq) # the result can be compared using a_bk.eval() and a.eval()
result_0 = tf.equal(a,a_bk) # also can use tf.equal to check equality element-wise
```

Case suspends for better answer if anyone please to enlight more.