Skip to content

Instantly share code, notes, and snippets.

@run2
Created January 28, 2015 13:30
Show Gist options
  • Save run2/e7162610e759a3453156 to your computer and use it in GitHub Desktop.
Save run2/e7162610e759a3453156 to your computer and use it in GitHub Desktop.
Copying weights using layer type on Nolearn NeuralNet
def load_weights_from_by_layers(self, source):
self._output_layer = self.initialize_layers()
if isinstance(source, str):
source = np.load(source)
sourcelayers = {'Conv2DLayer':[],'DenseLayer':[]}
for l in source.get_all_layers():
if 'Conv2DLayer' in str(type(l)):
sourcelayers['Conv2DLayer'].append(l)
if 'DenseLayer' in str(type(l)):
sourcelayers['DenseLayer'].append(l)
selflayers = {'Conv2DLayer':[],'DenseLayer':[]}
for l in self.get_all_layers():
if 'Conv2DLayer' in str(type(l)):
selflayers['Conv2DLayer'].append(l)
if 'DenseLayer' in str(type(l)):
selflayers['DenseLayer'].append(l)
lenConv = min(len(sourcelayers['Conv2DLayer']),len(selflayers['Conv2DLayer']))
if(lenConv > len(selflayers['Conv2DLayer'])):
selflayers['Conv2DLayer'].pop(lenConv- len(selflayers['Conv2DLayer']))
elif(lenConv > len(sourcelayers['Conv2DLayer'])):
sourcelayers['Conv2DLayer'].pop(lenConv - len(sourcelayers['Conv2DLayer']))
for l1, l2 in zip(sourcelayers['Conv2DLayer'], selflayers['Conv2DLayer']):
w1 = l1.W.get_value()
w2 = l2.W.get_value()
if w1.shape != w2.shape:
continue
l2.W.set_value(w1)
lenDense = min(len(sourcelayers['DenseLayer']),len(selflayers['DenseLayer']))
if(lenDense > len(selflayers['DenseLayer'])):
selflayers['DenseLayer'].pop(lenDense- len(selflayers['DenseLayer']))
elif(lenDense > len(sourcelayers['DenseLayer'])):
sourcelayers['DenseLayer'].pop(lenDense - len(sourcelayers['DenseLayer']))
for l1, l2 in zip(sourcelayers['DenseLayer'], selflayers['DenseLayer']):
w1 = l1.W.get_value()
w2 = l2.W.get_value()
if w1.shape != w2.shape:
continue
l2.W.set_value(w1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment