keras 如何将Tensor对象转换为numpy数组?

f4t66c6m  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(230)

我已经建立并训练了一个CNN,我想把第一个密集层的权重作为numpy数组。

f = Path("model_structure.json")
model_structure = f.read_text()
model_wieghts = model_from_json(model_structure)
model_wieghts.load_weights("model_weights.h5")

为了得到所使用的第一致密层i的重量:

wieghts_tf = model_wieghts.layers[9].output

wieights_tf具有以下值:

<tf.Tensor 'dense_1/Relu:0' shape=(?, 496) dtype=float32>

问题是,我想把wieights_tf的类型从Tensor转换成numpy数组。所以我创建了一个会话,并使用eval()函数来完成此操作。如下所示:

sess = tf.Session()
with sess.as_default() :
    vector = wieghts_tf.eval()

但我得到这个错误

InvalidArgumentError: You must feed a value for placeholder tensor 'conv2d_1_input' with dtype float and shape [?,180,180,3]

我该怎么解决呢?
下面是CNN模型的代码:

#creating nueral network 

model = Sequential()
conv1_2d = model.add(Conv2D(180, (3, 3), padding='same', input_shape=(180, 180, 3), activation="relu")) #180 is the number of filters
conv2_2d = model.add(Conv2D(180, (3, 3), activation="relu"))
max_pool1 = model.add(MaxPooling2D(pool_size=(3, 3)))
drop_1 = model.add(Dropout(0.25))
conv3_2d =model.add(Conv2D(360, (3, 3), padding='same', activation="relu"))
conv4_2d =model.add(Conv2D(360, (3, 3), activation="relu"))
max_pool2 = model.add(MaxPooling2D(pool_size=(3, 3)))
drop_2 = model.add(Dropout(0.25))
flat = model.add(Flatten())
dense_1 = model.add(Dense(496, activation="relu"))
drop_3 = model.add(Dropout(0.5))
dense_2 = dense_layer = model.add(Dense(376, activation="softmax"))
model.compile(
    loss='categorical_crossentropy',
    optimizer='adam',
    metrics=['accuracy']
    )
model.fit(
    train_data,
    train_label,
    batch_size=32,
    epochs=40,
    verbose = 2 ,
    validation_split=0.1,
    shuffle=True)

# Save neural network structure

model_structure = model.to_json()

f = Path("model_structure.json")

f.write_text(model_structure)

# Save neural network's trained weights

model.save_weights("model_weights.h5")
gmxoilav

gmxoilav1#

找到了解决办法:

x = np.frombuffer(layer.convolution.weights.float16Value, dtype=np.float16)

相关问题