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

时间:2019-03-26 15:13:23

标签: numpy tensorflow machine-learning keras conv-neural-network

我已经建立并训练了一个CNN,我想将第一个密集层的维数作为numpy array。在训练模型后,我使用此代码加载了模型

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

为了获得我使用的第一个致密层的宽度:

wieghts_tf = model_wieghts.layers[9].output

wieghts_tf具有以下值:

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

问题是,我想将wieghts_tf的类型从张量转换为numpy array。所以我创建了一个会话,并使用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")

0 个答案:

没有答案