2017-07-10 1 views
0

FürTensorflow1.2 verursacht den Fehler: kann nicht _thread.lock Objekte auf deep oder cPickle

encoder_cell = copy.deepcopy(cell) 

oder

encoder_cell = cPickle.loads(cPickle.dumps(cell, -1)) 

In tensoflow1.2 Beize, es erhöhen Fehler wie:

encoder_cell = cPickle.loads(cPickle.dumps(cell, -1)) 
TypeError: can't pickle _thread.lock objects 

aber es funktioniert gut auf tensorflow1.0.1

+0

Im Allgemeinen TensorFlow Python API-Objekte (und verwandte Objekte wie 'tf.Tensor',' tf.Operation' oder der RNN Zellschichten) sind nicht "pickle" -fähig. Müssen Sie eine 'copy.deepcopy()' des 'cell' Objekts erstellen, oder könnte ein anderer Ansatz funktionieren? – mrry

+0

spezifischerer Vorschlag? Ich portiere jemand anderen Code. –

+0

Nun, funktioniert es, wenn Sie die Zeile 'encoder_cell = copy.deepcopy (cell)' durch eine einfache flache Kopie ersetzen: 'encoder_cell = cell'? Wenn nicht, können Sie weitere Details des Codes teilen? (Weil wir nicht wissen, wie 'Zelle' erstellt wurde oder wenn es sinnvollerweise zustandsbehaftet ist ....) – mrry

Antwort

0

Wenn Sie mit älteren arbeiten seq2seq.py, dann fügen Sie diese zu Ihrem Skript:

setattr(tf.contrib.rnn.GRUCell, '__deepcopy__', lambda self, _: self) 
setattr(tf.contrib.rnn.BasicLSTMCell, '__deepcopy__', lambda self, _: self) 
setattr(tf.contrib.rnn.MultiRNNCell, '__deepcopy__', lambda self, _: self) 
Verwandte Themen