localminimum / QANet

A Tensorflow implementation of QANet for machine reading comprehension
MIT License
983 stars 305 forks source link

Trying to fine tune with different data, But getting dimensionality mismatched for tensor #18

Open brojokm opened 6 years ago

brojokm commented 6 years ago

I am getting the following error while trying to fine tune

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [326,64] rhs shape= [1427,64]
     [[Node: save/Assign_746 = Assign[T=DT_FLOAT, _class=["loc:@char_mat"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/device:CPU:0"](char_mat, save/RestoreV2:746)]]
localminimum commented 6 years ago

Hi, Try re running the config.py --mode prepro if you make changes regarding embedding matrices

brojokm commented 6 years ago

@localminimum If I change training file then after running preprocessing, embedding file will change and its dimension is mismatched with the existing one. That is what I have noticed as per my knowledge. Note: dimension does not mean embedding vector size of char/word.. Basically its giving error because number of words and chars are different. You can see here lhs shape= [326,64] rhs shape= [1427,64]

kindly help me to resolve this.

localminimum commented 6 years ago

It's not that the number of words and chars are different. tf.assign happens when the pretrained weights are loaded.

It seems like you are trying to load a trained model where the character embeddings size is different to your current character embeddings size. Try training again from scratch with your new char embeddings.

brojokm commented 6 years ago

I want to train the pretrain model. I don't have enough data to train from scratch. Kindly tell me if this is possible or not? . If yes, how?

On Thu 3 May, 2018, 10:51 AM localminimum, notifications@github.com wrote:

It's not that the number of words and chars are different. tf.assign happens when the pretrained weights are loaded.

It seems like you are trying to load a trained model where the character embeddings size is different to your current character embeddings size. Try training again from scratch with your new char embeddings.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/NLPLearn/QANet/issues/18#issuecomment-386194102, or mute the thread https://github.com/notifications/unsubscribe-auth/ASkx2KTKM2-7WzIn1N8wYfk49fny6c9Wks5tupPMgaJpZM4TuXgQ .

localminimum commented 6 years ago

You can just train the new character embeddings from scratch while using the pretrained weights for other weights. But I don't have that feature implemented here. You might have to manually allocate each weight.

brojokm commented 6 years ago

Hi! I'm new to tensorflow, and while I understand that I need to manually allocate weights to layers for the non-character embedding layers (it seems that word embeddings are non-trainable). Also, I don't understand how to restore only selected portions from checkpoint. It'll be really helpful if you could elaborate on what I need to do (or sample code) Thanks in advance :)

anshulsolanki commented 6 years ago

@brojokm and @localminimum were you able to resolve this. I am getting the same error. Any help on how to "just train the new character embeddings from scratch while using the pretrained weights for other weights" is appreciated.