获取 TensorFlow/Keras 中间层的输出

2024-04-06

我正在尝试获取 Keras 中中间层的输出,以下是我的代码:

XX = model.input # Keras Sequential() model object
YY = model.layers[0].output
F = K.function([XX], [YY]) # K refers to keras.backend


Xaug = X_train[:9]
Xresult = F([Xaug.astype('float32')])

运行这个,我得到一个错误:

InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'dropout_1/keras_learning_phase' with dtype bool

我开始知道,因为我在模型中使用了 dropout 层,所以我必须指定一个learning_phase()根据 keras 标记我的函数文档 https://keras.io/getting-started/faq/#how-can-i-obtain-the-output-of-an-intermediate-layer。 我将代码更改为以下内容:

XX = model.input
YY = model.layers[0].output
F = K.function([XX, K.learning_phase()], [YY])


Xaug = X_train[:9]
Xresult = F([Xaug.astype('float32'), 0])

现在我遇到了一个我无法弄清楚的新错误:

TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a int into a Tensor.

任何帮助,将不胜感激。
PS:我是 TensorFlow 和 Keras 的新手。

Edit 1 :以下是我正在使用的完整代码。我正在使用此 NIPS 中讨论的空间变换器网络paper https://papers.nips.cc/paper/5854-spatial-transformer-networks.pdf这是 Kera 的实现here https://github.com/oarriaga/spatial_transformer_networks/tree/master/src

input_shape =  X_train.shape[1:]

# initial weights
b = np.zeros((2, 3), dtype='float32')
b[0, 0] = 1
b[1, 1] = 1
W = np.zeros((100, 6), dtype='float32')
weights = [W, b.flatten()]

locnet = Sequential()
locnet.add(Convolution2D(64, (3, 3), input_shape=input_shape, padding='same'))
locnet.add(Activation('relu'))
locnet.add(Convolution2D(64, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(MaxPooling2D(pool_size=(2, 2)))
locnet.add(Convolution2D(128, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(Convolution2D(128, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(MaxPooling2D(pool_size=(2, 2)))
locnet.add(Convolution2D(256, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(Convolution2D(256, (3, 3), padding='same'))
locnet.add(Activation('relu'))
locnet.add(MaxPooling2D(pool_size=(2, 2)))
locnet.add(Dropout(0.5))
locnet.add(Flatten())
locnet.add(Dense(100))
locnet.add(Activation('relu'))
locnet.add(Dense(6, weights=weights))


model = Sequential()

model.add(SpatialTransformer(localization_net=locnet,
                             output_size=(128, 128), input_shape=input_shape))

model.add(Convolution2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(128, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(256, (3, 3), padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))

model.add(Dense(num_classes))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

#==============================================================================
# Start Training
#==============================================================================
#define training results logger callback
csv_logger = keras.callbacks.CSVLogger(training_logs_path+'.csv')
model.fit(X_train, y_train,
          batch_size=batch_size,
          epochs=20,
          validation_data=(X_valid, y_valid),
          shuffle=True,
          callbacks=[SaveModelCallback(), csv_logger])




#==============================================================================
# Visualize what Transformer layer has learned
#==============================================================================

XX = model.input
YY = model.layers[0].output
F = K.function([XX, K.learning_phase()], [YY])


Xaug = X_train[:9]
Xresult = F([Xaug.astype('float32'), 0])

# input
for i in range(9):
    plt.subplot(3, 3, i+1)
    plt.imshow(np.squeeze(Xaug[i]))
    plt.axis('off')

for i in range(9):
    plt.subplot(3, 3, i + 1)
    plt.imshow(np.squeeze(Xresult[0][i]))
    plt.axis('off')

最简单的方法是在 Keras 中创建一个新模型,而不调用后端。为此,您需要功能模型 API:

from keras.models import Model

XX = model.input 
YY = model.layers[0].output
new_model = Model(XX, YY)

Xaug = X_train[:9]
Xresult = new_model.predict(Xaug)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取 TensorFlow/Keras 中间层的输出 的相关文章

随机推荐

  • 单个servlet如何处理来自客户端的多个请求

    单个 servlet 如何处理以用户请求形式出现的多个客户端请求 基于单例设计模式 我知道我们创建了单个 servlet 实例 但是单个 servlet 如何处理数百万个请求 也对其中涉及的线程感到困惑 此外 是否有任何浏览器规范或设置在这
  • 使用 MultipleOutputs 写入 MapReduce 中的 HBase

    我目前有一个 MapReduce 作业 它使用 MultipleOutputs 将数据发送到多个 HDFS 位置 完成后 我使用 HBase 客户端调用 在 MR 之外 将一些相同的元素添加到一些 HBase 表中 使用 TableOutp
  • 是否有针对数据库结构更改的版本控制系统?

    我经常遇到以下问题 我对项目进行一些更改 需要在数据库中添加新表或列 我修改数据库并继续我的工作 通常 我记得写下更改 以便可以在实时系统上复制它们 然而 我并不总是记得我改变了什么 也不总是记得把它写下来 因此 我对实时系统进行了推送 但
  • 快速自定义警报(UIAlertView)

    如何使用 Swift 创建自定义警报 我尝试翻译 Objective c 的指南 但加载了全屏布局 为了简单起见 我可以加载带有透明背景的新布局 我尝试这样做 listaalertviewcontroller view background
  • JavaScript 确认对话框

    我想在删除按钮上添加一个确认对话框 询问用户是否可以删除所选项目 如果不是 则不会发生任何事情 否则应执行 url 我知道如何通过一些 Javascript 代码来实现这一点 但我正在寻找一种代码更少的解决方案 我的意思是例如 a href
  • 如何编写一个选择查询或服务器端函数来从许多数据点生成一个整洁的时间流图?

    注意 我正在使用图形数据库 具体来说是 OrientDB 这让我可以自由地用 javascript 或 groovy 编写服务器端函数 而不是仅限于使用 SQL 来解决这个问题 注 2 由于这是一个图形数据库 因此下面的箭头只是描述数据流
  • 在proguard中,如何保留一组类的方法名称?

    我正在使用 proguard 来混淆我的 Android 应用程序 Android 应用程序包含一些本机代码 这些代码对完全限定的 java 方法进行回调 我不需要混淆这些类及其方法的名称 下面正确保留了类名称 但没有保留方法名称 keep
  • 如何排除 findbugs 中的构造函数?

    我可以在 findbugs exclude xml 中排除这样的常规方法
  • 如何使用 C++ 中的默认构造函数定义和声明变量?

    根据我对全局范围内的声明和定义的理解 MyClass instance Declares a function that returns a MyClass MyClass instance Declares an instance of
  • Android 中“最小宽度 dp”的混乱

    我正在学习如何使用 最小宽度 dp 来支持不同的屏幕this http android developers blogspot in 2011 07 new tools for managing screen sizes html在安卓中
  • 将派生类型中的指针分配给 Fortran 中相同类型中的目标

    我想在包含在同一派生类型中的派生类型中分配一个指针 下面的代码给了我下面的错误 这是怎么回事 我该如何解决这个问题 24 zoos i tigers 1 gt zoos i animals 1 1 1 Error Expected boun
  • 数组中的离群值去除技术

    我知道网上有大量用于异常值去除的资源 但我还没有设法获得我真正想要的东西 所以在这里发布 我有一个数组 或 DF 4列 现在我想根据列的异常值从 DF 中删除行 以下是我尝试过的 但并不完美 def outliers2 data2 m 4
  • 当路径重叠时,Internet Explorer 发送错误的 cookie

    我们有一个 Web 应用程序的多个副本 部署在同一域的多个路径上 例子 http mydomain com abc http mydomain com abc http mydomain com xyz http mydomain com
  • 从 UUID 或 HMAC/JWT/哈希生成一次性安全令牌?

    我正在为网络应用程序构建后端 当新用户访问该网站并单击Sign Up按钮 他们将填写一个超级简单的表格 要求他们提供用户名 密码 然后他们就会提交 这会提示服务器向该电子邮件地址发送一封验证电子邮件 然后 他们将检查电子邮件 单击链接 验证
  • 如何在 C++ 中更改 QTabWidget 中的文本对齐方式?

    这与以下问题相同 如何更改 QTabWidget 中的文本对齐方式 https stackoverflow com questions 3607709 how to change text alignment in qtabwidget 我
  • 如何破译节点js中在javascript中的加密js中加密的字符串

    我的客户端代码 data username CryptoJS AES encrypt user username password data password CryptoJS AES encrypt user password passw
  • 如何避免 Instagram 错误 429 已超出每小时最大请求数

    我做了一个应用程序 从 10 月 31 日星期六开始删除 Instagram 上的评论 当我使用 API 删除评论时 我收到以下响应 error type OAuthRateLimitException code 429 error mes
  • 我如何作为代理人传递财产?

    这是一个理论问题 我已经找到了解决问题的方法 这让我走上了不同的道路 但我认为这个问题仍然可能很有趣 我可以像使用方法一样将对象属性作为委托传递吗 例如 假设我有一个加载了数据的数据读取器 并且每个字段的值需要传递到已检查 DBNull 的
  • 有没有办法从 Eclipse 访问 Stata?

    类似于StatET http www walware de goto statet允许您从 Eclipse 运行 R 代码的插件 我尝试用谷歌搜索它 但没有发现任何有用的东西 据我所知 没有一个 如果您是 CLI 迷或愿意使用 Emacs
  • 获取 TensorFlow/Keras 中间层的输出

    我正在尝试获取 Keras 中中间层的输出 以下是我的代码 XX model input Keras Sequential model object YY model layers 0 output F K function XX YY K