如何在使用Keras的第k层之后获得激活



注意:我已经用tensorflow变量作为输入读取了keras正向传递,但它没有帮助。

我正在用MNIST数据库训练Keras的自动编码器无监督神经网络:

import keras, cv2
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(60000, 784).astype('float32') / 255.0
x_test = x_test.reshape(10000, 784).astype('float32') / 255.0
model = Sequential()
model.add(Dense(100, activation='sigmoid', input_shape=(784,)))
model.add(Dense(10, activation='sigmoid'))
model.add(Dense(100, activation='sigmoid'))
model.add(Dense(784, activation='sigmoid'))
model.compile(loss='mean_squared_error', optimizer='sgd')
history = model.fit(x_train, x_train, batch_size=1, epochs=1, verbose=0)

然后,当输入向量为x_test[i]:时,我想获得输出向量

for i in range(100):
x = x_test[i]
a = model(x)
cv2.imshow('img', a.reshape(28,28))
cv2.waitKey(0)

但我得到了这个错误:

层的所有输入都应该是张量。

我应该如何修改此代码,以便对神经网络中的输入向量进行前向传递,并获得向量作为回报

还有如何在第二层之后获得激活即直到最后一层才传播,但在第二层之后获得输出
示例:输入:784大小的矢量,输出:10大小的矢量

要在完成训练后运行模型,需要使用keras predict((。这将根据您的输入数据对图形进行评估。请注意,输入数据必须与指定的模型输入具有相同的维度,在您的情况下,它看起来是[None, 784]。Keras不需要指定批次维度,但仍然需要一个2D数组。。

x = x_test[5]
x = x[numpy.newaxis,:]
out_val = model.predict(x)[0]

如果您只想处理一个值。

numpy.newaxis是制作2D阵列所必需的,因此与您的输入大小相匹配。如果传入一个值数组以同时计算所有值,则可以跳过此操作。

使用Keras/Tensorflow,您的模型是一个图/函数,而不是标准的python过程代码。你不能用数据直接调用它。您需要创建函数,然后调用这些函数。要从中间层获得输出,可以执行以下操作。。

OutFunc = K.function([model.input], [model.layers[2].output])
out_val = OutFunc([x])[0]

同样,请记住,输入上有一个批次维度,它将在输出中生成。如果你需要一些额外的例子,这里有很多关于从中间层获取数据的文章。例如,请参阅Keras,如何获得每一层的输出?

除了接受的答案之外,还有另一种方法:当x只是(784,)(784,1)numpy数组时,我们可以使用以下方法:

model.predict([[x]]) 

具有双CCD_ 7。

最新更新