Die Frage nach Array überschreiben mit h5py hat mein Problem nicht gelöst. Ich möchte die Array-Werte eines VGG16-Modells bearbeiten.Wie bearbeitet man h5-Dateien mit h5py?
f = h5py.File('C:/Users/yash/.keras/models/vgg16_weights_tf_dim_ordering_tf_kernels_2.h5', mode = 'a')
ab = list(h5py.AttributeManager.keys(f))
print(list(f.attrs.keys()))
print(ab)
Der obige Code liefert:
['layer_names']
['block1_conv1', 'block1_conv2', 'block1_pool', 'block2_conv1', 'block2_conv2', 'block2_pool', 'block3_conv1', 'block3_conv2', 'block3_conv3',
'block3_pool', 'block4_conv1', 'block4_conv2', 'block4_conv3', 'block4_pool',
'block5_conv1', 'block5_conv2', 'block5_conv3', 'block5_pool', 'fc1', 'fc2',
'flatten', 'predictions']
Nach diesem Code: print(f.attrs['layer_names'])
ich folgendes erhalten:
[b'block1_conv1' b'block1_conv2' b'block1_pool' b'block2_conv1'
b'block2_conv2' b'block2_pool' b'block3_conv1' b'block3_conv2'
b'block3_conv3' b'block3_pool' b'block4_conv1' b'block4_conv2'
b'block4_conv3' b'block4_pool' b'block5_conv1' b'block5_conv2'
b'block5_conv3' b'block5_pool' b'flatten' b'fc1' b'fc2' b'predictions']
Wie kann ich die Werte zu ändern, die enthalten in der f.attrs['layer_names']
? Ich kann sie hauptsächlich nicht bearbeiten, weil die Verwendung von: print(f.attrs['layer_names/block1_conv1'])
einen Fehler zurückgibt.
In jedem Block (n) _conv (n) befindet sich eine Gewichtungs- und Bias-Matrix.
Ich möchte diese Werte ändern.
Ich mache das in Python 3, und keine Dokumentation half mir bei der Bearbeitung dieser Werte. Vor allem, weil ich nicht in der Lage bin diese diesen Code ohne Verwendung zuzugreifen:
layer = h5py.AttributeManager.get(f, key = str(layerstringlist[i]))
nplayer = np.asarray(list(layer))
layerstringlist
ist eine Liste dieser Art und Weise: Gibt es richtig
['block1_conv1/block1_conv1_W_1:0', 'block1_conv1/block1_conv1_b_1:0', .....
'predictions/predictions_W_1:0', 'predictions/predictions_b_1:0']
, aber ich bin nicht in der Lage die modifizierte h5-Datei zu speichern weil ich nicht weiß, wie man es in Python 3 referenziert.
Vielen Dank im Voraus!
Kannst du nicht auf Dinge mit 'f.attrs ['layer_names] [0]', 'f.attrs [' layer_names] [1]' usw. zugreifen? – Evert
Ich habe es versucht. f.attrs ['layer_names'] [0] [:] gibt b'block1_conv1 'zurück. Grundsätzlich ist es eine Liste, die mit [0] indiziert wird. Ich muss auf die Gruppe innerhalb von 'block1_conv1' zugreifen, damit ich diese Matrix verwenden und bearbeiten kann. Irgendwelche Tipps? – Mathbreaker
Die Zeichenkette ist eine Bytefolge, also ja, Sie sehen den (ASCII) Wert des Zeichens an dieser Position (107 für 'c'). Aber das hilft Ihnen nicht, da es nur auf die Namen der Layer zugreift, nicht auf ihre Daten. – Evert