Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Keras / Tensorflow incompatible shape

I’m pretty new to tensorflow / keras and I can’t find a fix to this problem. I have a training data set of ~4000 20-dimensional vectors that each describe a document. I also have those same document-vectors at a later state. I want to predict how the document-vector will be at the end from the initial state. I compared the document vectors at state 0 with their final state using cosine similarity and got about .5. The goal is to improve that with a simple model. Currently i am doing:

model = Sequential()
model.add(Dense(20, activation='relu', input_dim=20))
model.compile(optimizer='adam', loss='cosine_similarity', metrics [tf.keras.metrics.CosineSimilarity(axis=1)])
model.summary()
history = model.fit(input_train, y_train,
                epochs=30,
                batch_size=16,
                validation_data=(input_test,y_test),
                callbacks=[tbCallBack]
               )

After 30 epochs this gives me a validation cosine similarity of .66, so my guess is that this actually did improve my initial cosine similarity and produced at least some sort of value added.

Then I want to look at the predictions to see if they make any sense:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

lol = np.asarray([0.0125064 , 0.01250269, 0.01250133, 0.01250481, 0.01250508,
   0.0125009 , 0.0125009 , 0.01250437, 0.01250131, 0.01250181,
   0.01250403, 0.0125038 , 0.01250372, 0.01250246, 0.01250183,
   0.01250226, 0.01250294, 0.76244247, 0.01250485, 0.01250205])
model.predict([lol])
#model.predict(lol)

Both predict versions give me the following error:

WARNING:tensorflow:Model was constructed with shape (None, 20) for input KerasTensor(type_spec=TensorSpec(shape=(None, 20), dtype=tf.float32, name='dense_69_input'), name='dense_69_input', description="created by layer 'dense_69_input'"), but it was called on an input with incompatible shape (None,).

Does someone know how to solve this? Also, if someone is familiar with this kind of goal, is this the right way? Is there something I can do differently?

Any help is very much appreciated!

>Solution :

Try np.expand_dims to add the batch dimension to your array:

import tensorflow as tf
import numpy as np

model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(20, activation='relu', input_dim=20))
model.compile(optimizer='adam', loss='cosine_similarity', metrics= [tf.keras.metrics.CosineSimilarity(axis=1)])
model.summary()
input_train = tf.random.normal((5, 20))
y_train = tf.random.normal((5, 20))
history = model.fit(input_train, y_train,
                epochs=1,
                batch_size=2)

lol = np.asarray([0.0125064 , 0.01250269, 0.01250133, 0.01250481, 0.01250508,
   0.0125009 , 0.0125009 , 0.01250437, 0.01250131, 0.01250181,
   0.01250403, 0.0125038 , 0.01250372, 0.01250246, 0.01250183,
   0.01250226, 0.01250294, 0.76244247, 0.01250485, 0.01250205])
lol = np.expand_dims(lol, axis=0)
model.predict(lol)
array([[0.0727988 , 0.        , 0.3008919 , 0.00460427, 0.        ,
        0.01472487, 0.31665963, 0.11831823, 0.        , 0.05261957,
        0.        , 0.        , 0.        , 0.        , 0.13595472,
        0.07765757, 0.09340346, 0.        , 0.        , 0.        ]],
      dtype=float32)
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading