subhasis256 / ml_code_completion

Code completion using machine learning :)
MIT License
32 stars 5 forks source link

keras remove Graph #1

Open fighting41love opened 7 years ago

fighting41love commented 7 years ago

Keras removes Graph in the new version. For new keras, they use the functional API instead.

Hence, the code has an error:
from keras.models import Sequential, Graph ImportError: cannot import name 'Graph'

Anyone knows how to modify the codes in 'rnnLSTM' ? from keras.models import Model ? and How to modify the codes from line 268 - line 303?

Thanks!

ghost commented 5 years ago

I think late but this is my code:

    inputs = Input(shape=(winSize,))
    wvec = Embedding(vocab_size, wdim, input_length=winSize)(inputs)
    wvecf = Flatten()(wvec)
    attn = Dense(winSize, activation='sigmoid', W_regularizer=l2(reg), name="attn")(wvecf)
    attnr = RepeatVector(wdim)(attn)
    attnp = Permute(dims=(2,1))(attnr)
    # multiply word vector by attention and flatten output
    awvecf = Flatten()(Multiply()([wvec, attnp]))  
    # fully connected layers
    d1 = Dense(zdim, activation='relu', W_regularizer=l2(reg))(awvecf)
    d2 = Dense(zdim2, activation='relu', W_regularizer=l2(reg))(d1)
    # final layer
    d3 = Dense(vocab_size, activation=output_activation, W_regularizer=l2(reg))(d2)
    self.model = Model(inputs=[inputs], outputs=d3)
    self.model.compile(optimizer=loss_optimizer, loss='categorical_crossentropy')

    # also compile a function for getting the attention vector
    self.get_attn = Model(inputs=[inputs], outputs=attn)

Note: When you call attn attn = self.get_attn.predict(Xs.astype(np.int32))

Hope will help you,

AndreiKrutikov commented 5 years ago

@truonghoang It didn't help me. Now it saying probs = self.model.predict({'word': Xs})['probs'] IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices

ghost commented 5 years ago

@truonghoang It didn't help me. Now it saying probs = self.model.predict({'word': Xs})['probs'] IndexError: only integers, slices (:), ellipsis (...), numpy.newaxis (None) and integer or boolean arrays are valid indices

I think we change this function line 442 file rnnLSTM.py:

def score(self, Xs):
        if isinstance(self.model, Graph):
            return self.model.predict({'word': Xs})['probs']
        else:
            return self.model.predict(Xs)

to :

def score(self, Xs):
        return self.model.predict(Xs)

and this function line 346:

def score(self, Xs):
        return self.model.predict({'word': Xs})['probs']

to:

def score(self, Xs):
        return self.model.predict(Xs)

because now we don't depend on the Graph.

sorry I missed those.