Versuchen set_weights.
zum Beispiel:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import numpy as np
np.random.seed(1234)
from keras.layers import Input
from keras.layers.convolutional import Convolution2D
from keras.models import Model
print("Building Model...")
inp = Input(shape=(1,None,None))
x = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(inp)
output = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(x)
model_network = Model(input=inp, output=output)
w = np.asarray([
[[[
[0,0,0],
[0,2,0],
[0,0,0]
]]]
])
for layer_i in range(len(model_network.layers)):
print (model_network.layers[layer_i])
for layer_i in range(1,len(model_network.layers)):
model_network.layers[layer_i].set_weights(w)
input_mat = np.asarray([
[[
[1.,2.,3.,10.],
[4.,5.,6.,11.],
[7.,8.,9.,12.]
]]
])
print("Input:")
print(input_mat)
print("Output:")
print(model_network.predict(input_mat))
w2 = np.asarray([
[[[
[0,0,0],
[0,3,0],
[0,0,0]
]]]
])
for layer_i in range(1,len(model_network.layers)):
model_network.layers[layer_i].set_weights(w2)
print("Output:")
print(model_network.predict(input_mat))
bauen ein Modell mit etwa zwei Faltungsschichten
print("Building Model...")
inp = Input(shape=(1,None,None))
x = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(inp)
output = Convolution2D(1, 3, 3, border_mode='same', init='normal',bias=False)(x)
model_network = Model(input=inp, output=output)
dann definieren Sie Ihre Gewichte (i w eine einfache bin mit, aber man konnte np.random verwenden .uniform oder ähnliches, wenn Sie möchten)
w = np.asarray([
[[[
[0,0,0],
[0,2,0],
[0,0,0]
]]]
])
Werfen Sie einen Blick auf die Schichten in einem Modell
for layer_i in range(len(model_network.layers)):
print (model_network.layers[layer_i])
Sets jedes Gewicht für jede Faltungsschicht (Sie, dass die erste Schicht tatsächlich Eingang sehen werden und Sie nicht wollen, das ändern, deshalb beginnt der Bereich von 1 nicht Null).
for layer_i in range(1,len(model_network.layers)):
model_network.layers[layer_i].set_weights(w)
generieren eine Eingabe für den Test und Vorhersage der Ausgabe von Ihrem Modell
input_mat = np.asarray([
[[
[1.,2.,3.,10.],
[4.,5.,6.,11.],
[7.,8.,9.,12.]
]]
])
print("Output:")
print(model_network.predict(input_mat))
Man könnte es wieder ändern, wenn Sie wollen, und prüfen Sie erneut für die Ausgabe:
w2 = np.asarray([
[[[
[0,0,0],
[0,3,0],
[0,0,0]
]]]
])
for layer_i in range(1,len(model_network.layers)):
model_network.layers[layer_i].set_weights(w2)
print("Output:")
print(model_network.predict(input_mat))
Probe Ausgabe:
Using Theano backend.
Building Model...
<keras.engine.topology.InputLayer object at 0x7fc0c619fd50>
<keras.layers.convolutional.Convolution2D object at 0x7fc0c6166250>
<keras.layers.convolutional.Convolution2D object at 0x7fc0c6150a10>
Weights after change:
[array([[[[ 0., 0., 0.],
[ 0., 2., 0.],
[ 0., 0., 0.]]]], dtype=float32)]
Input:
[[[[ 1. 2. 3. 10.]
[ 4. 5. 6. 11.]
[ 7. 8. 9. 12.]]]]
Output:
[[[[ 4. 8. 12. 40.]
[ 16. 20. 24. 44.]
[ 28. 32. 36. 48.]]]]
Output:
[[[[ 9. 18. 27. 90.]
[ 36. 45. 54. 99.]
[ 63. 72. 81. 108.]]]]
Von Ihrem Blick auf .layers können Sie sehen, dass die erste Schicht eingegeben wird und die anderen Ihre Faltungsschichten.
Ich landete etwas ähnliches. Das Speichern auf Festplatte und das Laden dauert sehr lange, daher behalte ich die Gewichte einfach in einer Variablen: weights = model.get_weights() Ich bekomme die anfänglichen Gewichte wie diese, bevor ich das erste Training durchführe. Dann, vor jedem weiteren Training, lade ich die Anfangsgewichte neu und führe jkleints Shuffle-Methode aus, wie in dem von mir geposteten Link erwähnt. Scheint reibungslos zu funktionieren .. – Tor