【问题标题】:How to print the activation output of specified layers如何打印指定层的激活输出
【发布时间】:2019-09-06 02:48:23
【问题描述】:

我对 Keras 和深度学习还很陌生,我一直想打印我的一部分层的输出(名为 output[x]

您可以在下面找到架构的一部分。请注意,我没有提供任何可重现的代码。

目标是验证val_loss 函数。这涉及一个分类交叉熵函数,其中公式(简化)表示为:

L=−y⋅log(ŷ)

当我运行架构时给出 L,因为模型输出 Ly 是我的基本事实, 是估计值。

目标:打印 output1、output2、output3、output4 和 output5 的值,这样我就知道我的 是什么了。有了这些给定的变量,我就可以验证使用的公式。

layer_1 = Conv2D(filters[0], kernel_size[0], activation='relu', strides=strides)(inputs)
layer_11 = MaxPooling2D(pool_size=pool_size, strides=maxp_strides, padding='valid')(layer_1)
layer_2 = Conv2D(filters[1], kernel_size[1], activation='relu', strides=strides, padding='same')(layer_11)
layer_3 = Conv2D(filters[2], kernel_size[2], strides=strides, activation='relu', padding='same')(layer_2)
layer_4 = Conv2D(filters[3], kernel_size[3], strides=strides, activation='relu', padding='same')(layer_3)
layer_5 = Conv2D(filters[4], kernel_size[4], strides=strides, activation='relu', padding='same')(layer_4)
layer_6 = Flatten()(layer_5)
layer_7 = Dense(units[0], activation='relu')(layer_6)
layer_7 = Dropout(dropout)(layer_7)
layer_8 = Dense(units[1], activation='relu')(layer_7)
layer_8 = Dropout(dropout)(layer_8)
output1 = Dense(output_class, activation='softmax')(layer_8)
output2 = Dense(output_class, activation='softmax')(layer_8)
output3 = Dense(output_class, activation='softmax')(layer_8)
output4 = Dense(output_class, activation='softmax')(layer_8)
output5 = Dense(output_class, activation='softmax')(layer_8)

rms = optimizers.RMSprop(lr=lr, rho=rho, epsilon=epsilon, decay=decay)
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=factor, patience=patience, min_lr=min_lr)
early_stopping = EarlyStopping(monitor='val_loss', patience=ES_patience)

model = Model(inputs=inputs, outputs=[output1, output2, output3, output4, output5])
model.compile(optimizer=rms, loss='categorical_crossentropy', metrics=['categorical_crossentropy'])
history = model.fit(X_train, [self.y_train[:, 0, :], self.y_train[:, 1, :], self.y_train[:, 2, :],self.y_train[:, 3, :], self.y_train[:, 4, :]],batch_size=batch_size,epochs=epoch, validation_split=val_split, verbose=verbose, callbacks=[reduce_lr])

这是我尝试过的

print("outputs: {} - output1 {} - output2 {} - output3 {} - output4 {} - output5 {}".format(model.output,output1,output2,output3,output4,output5))
# outputs: [<tf.Tensor 'dense_38/Softmax:0' shape=(?, 3) dtype=float32>, <tf.Tensor 'dense_39/Softmax:0' shape=(?, 3) dtype=float32>, <tf.Tensor 'dense_40/Softmax:0' shape=(?, 3) dtype=float32>, <tf.Tensor 'dense_41/Softmax:0' shape=(?, 3) dtype=float32>, <tf.Tensor 'dense_42/Softmax:0' shape=(?, 3) dtype=float32>] - output1 Tensor("dense_38/Softmax:0", shape=(?, 3), dtype=float32) - output2 Tensor("dense_39/Softmax:0", shape=(?, 3), dtype=float32) - output3 Tensor("dense_40/Softmax:0", shape=(?, 3), dtype=float32) - output4 Tensor("dense_41/Softmax:0", shape=(?, 3), dtype=float32) - output5 Tensor("dense_42/Softmax:0", shape=(?, 3), dtype=float32)

print(model.layers[-1].output)
# Tensor("dense_42/Softmax:0", shape=(?, 3), dtype=float32)

【问题讨论】:

    标签: python tensorflow keras softmax activation-function


    【解决方案1】:

    问题是,当您这样定义图表时,其中没有任何值。 output1 只是一个占位符。如果您想可视化/显示/绘制图表中的任何内容(甚至检查您的计算图表),我建议您查看TensorBoard

    【讨论】:

      猜你喜欢
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-22
      • 2018-02-07
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      相关资源
      最近更新 更多