Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[predict.py] Impossible to create network #9

Open
RoiArthurB opened this issue Sep 21, 2018 · 5 comments
Open

[predict.py] Impossible to create network #9

RoiArthurB opened this issue Sep 21, 2018 · 5 comments

Comments

@RoiArthurB
Copy link

I'm using Python3 on Windows 10 and after training my network, I try to run predict.py and I have this error message :

Classical-Piano-Composer> python predict.py
Using TensorFlow backend.
Traceback (most recent call last):
  File "C:\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 1576, in _create_c_op
    c_op = c_api.TF_FinishOperation(op_desc)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Dimension 1 in both shapes must be equal, but are 358 and 359. Shapes are [256,358] and [256,359]. for 'Assign_11' (op: 'Assign') with input shapes: [256,358], [256,359].

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "predict.py", line 134, in <module>
    generate()
  File "predict.py", line 24, in generate
    model = create_network(normalized_input, n_vocab)
  File "predict.py", line 70, in create_network
    model.load_weights('weights.hdf5')
  File "C:\Python36\lib\site-packages\keras\engine\network.py", line 1161, in load_weights
    f, self.layers, reshape=reshape)
  File "C:\Python36\lib\site-packages\keras\engine\saving.py", line 928, in load_weights_from_hdf5_group
    K.batch_set_value(weight_value_tuples)
  File "C:\Python36\lib\site-packages\keras\backend\tensorflow_backend.py", line 2435, in batch_set_value
    assign_op = x.assign(assign_placeholder)
  File "C:\Python36\lib\site-packages\tensorflow\python\ops\variables.py", line 645, in assign
    return state_ops.assign(self._variable, value, use_locking=use_locking)
  File "C:\Python36\lib\site-packages\tensorflow\python\ops\state_ops.py", line 216, in assign
    validate_shape=validate_shape)
  File "C:\Python36\lib\site-packages\tensorflow\python\ops\gen_state_ops.py", line 63, in assign
    use_locking=use_locking, name=name)
  File "C:\Python36\lib\site-packages\tensorflow\python\framework\op_def_library.py", line 787, in _apply_op_helper
    op_def=op_def)
  File "C:\Python36\lib\site-packages\tensorflow\python\util\deprecation.py", line 454, in new_func
    return func(*args, **kwargs)
  File "C:\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 3155, in create_op
    op_def=op_def)
  File "C:\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 1731, in __init__
    control_input_ops)
  File "C:\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 1579, in _create_c_op
    raise ValueError(str(e))
ValueError: Dimension 1 in both shapes must be equal, but are 358 and 359. Shapes are [256,358] and [256,359]. for 'Assign_11' (op: 'Assign') with input shapes: [256,358], [256,359].
@RoiArthurB RoiArthurB changed the title [predict.py] Impossible de create network [predict.py] Impossible to create network Sep 21, 2018
@kevaday
Copy link

kevaday commented Oct 1, 2018

Did you change the code at all?
If not, maybe updating keras or tensorflow might help:
pip3 install --upgrade keras tensorflow

@jaehyoun
Copy link

jaehyoun commented Oct 5, 2018

Exactly same problem here,too.. :(

@winnie334
Copy link

I might have found a solution.

Whenever your network finishes an epoch, it saves it weights to a new file, called something like 'weights-improvement-11-2.9103-bigger.hdf5'. These weights are what you want to generate a new midi. The file predict.py however, always loads in the same weights: Line 70: model.load_weights('weights.hdf5'). That is why you're getting an error.

You should be able to run the network with any number of nodes, be it 512, 256 or even 2048. You have to load in the correct weights for that, however. What I did as a temporary solution is copy the name of the newly-generated weight file, and paste it into line 70 before generating a new midi. This works, but it isn't exactly elegant. Hopefully there'll be some kind of fix soon.

@arikhan
Copy link

arikhan commented May 4, 2019

I had the same problem too and this problem can also be caused because of the difference between the notes that you currently have while making the training and the notes file from Skuldur's repository. In case if you are using the notes file from the repository, try to create your own notes file and see if that works.

@tonykipkemboi
Copy link

So after running lstm.py several weights weights-improvement-...... are outputted in the classical-piano-composer folder. Do you copy the name of the recent weight and replace it here model.load_weights('weights.hdf5') ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants