transcranial / keras-js

Run Keras models in the browser, with GPU support using WebGL
https://transcranial.github.io/keras-js
MIT License
4.96k stars 501 forks source link

Dense layer not preserving second dimension #97

Open bminixhofer opened 6 years ago

bminixhofer commented 6 years ago

I am trying to run a CTC Model in the browser. In keras, it looks like this:

__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
the_input (InputLayer)          (None, 400, 64, 1)   0                                            
__________________________________________________________________________________________________
conv1 (Conv2D)                  (None, 400, 64, 16)  160         the_input[0][0]                  
__________________________________________________________________________________________________
max1 (MaxPooling2D)             (None, 200, 32, 16)  0           conv1[0][0]                      
__________________________________________________________________________________________________
conv2 (Conv2D)                  (None, 200, 32, 16)  2320        max1[0][0]                       
__________________________________________________________________________________________________
max2 (MaxPooling2D)             (None, 100, 16, 16)  0           conv2[0][0]                      
__________________________________________________________________________________________________
reshape (Reshape)               (None, 100, 256)     0           max2[0][0]                       
__________________________________________________________________________________________________
dense1 (Dense)                  (None, 100, 32)      8224        reshape[0][0]                    
__________________________________________________________________________________________________
gru1 (GRU)                      (None, 100, 512)     837120      dense1[0][0]                     
__________________________________________________________________________________________________
gru1_b (GRU)                    (None, 100, 512)     837120      dense1[0][0]                     
__________________________________________________________________________________________________
add_1 (Add)                     (None, 100, 512)     0           gru1[0][0]                       
                                                                 gru1_b[0][0]                     
__________________________________________________________________________________________________
gru2 (GRU)                      (None, 100, 512)     1574400     add_1[0][0]                      
__________________________________________________________________________________________________
gru2_b (GRU)                    (None, 100, 512)     1574400     add_1[0][0]                      
__________________________________________________________________________________________________
concatenate_1 (Concatenate)     (None, 100, 1024)    0           gru2[0][0]                       
                                                                 gru2_b[0][0]                     
__________________________________________________________________________________________________
dense2 (Dense)                  (None, 100, 80)      82000       concatenate_1[0][0]              
__________________________________________________________________________________________________
softmax (Activation)            (None, 100, 80)      0           dense2[0][0]                     
==================================================================================================
Total params: 4,915,744
Trainable params: 4,915,744
Non-trainable params: 0
__________________________________________________________________________________________________

So I would expect to get an output array of size 8000 (100 * 80). However, I get an array of size 80. After looking at the modelLayersMap of the model in the developer console, I found out that the dimension is (100, 256) as expected on reshape but gets cut down to (1, 32) at dense1. Here is the relevant part of the JSON:

kerasjs_issue

As far as I know, it's fairly uncommon to have a dense layer with 2D output, but I need it for this model. It would be great if this could be added!