i would like to ask question about embedding layer : namely here is very short tinny model :
import numpy as np
from keras.api.preprocessing.sequence import pad_sequences
from keras.api.models import Sequential
from keras.api.layers import Dense,Flatten,Embedding
from keras.src.legacy.preprocessing.text import one_hot
# Define 10 restaurant reviews
reviews =[
'Please come always',
'horrible service',
'rude waitress',
'cold food',
'horrible food!',
'awesome',
'awesome services!',
'rocks',
'poor work',
'couldn't have done better'
]
#Define labels
labels = np.array([0,1,1,1,1,0,0,0,1,0])
vocab_size =50
encoded_reviews=[one_hot(d,vocab_size) for d in reviews]
print(encoded_reviews)
max_length =4
padded_reviews =pad_sequences(encoded_reviews,maxlen=max_length,padding='post')
print(padded_reviews)
model =Sequential()
model.add(Embedding(input_dim=vocab_size,output_dim=8,input_length=max_length))
model.add(Flatten())
model.add(Dense(1,activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
print(model.summary())
model.fit(padded_reviews,labels,epochs=100,verbose=1)
# print(model.layers[0].get_weights()[0].shape)
#new data
new_review =['it was horrible']
new_seq =[one_hot(d,vocab_size) for d in new_review]
new_seq_padded =pad_sequences(encoded_reviews,maxlen=max_length,padding='post')
print(new_seq_padded)
print(model.predict(new_seq_padded))
if we check output of model :
but based on following site : embedding layer
output it supposed to be as :
of course this mismatch also affects on output :
[[0.33576852]
[0.7039955 ]
[0.6171005 ]
[0.7055181 ]
[0.7246254 ]
[0.39004195]
[0.3536735 ]
[0.43802705]
[0.6399197 ]
[0.31969672]]
but it is going to be a single output right? why does it returns so many output?