【问题标题】:Tensorflow model cannot add node after predict() calledTensorflow 模型在调用 predict() 后无法添加节点
【发布时间】:2021-11-25 00:07:20
【问题描述】:
import tensorflow as tf
from tensorflow.keras import Sequential
from tensorflow.keras.layers import LSTM, Conv1D, Dense
import numpy as np

#Create test data
X = np.array(list(range(100)))
X = np.reshape(X,(1,100,1))
print(X.shape)

#Model A
model_a = Sequential()
model_a.add(Conv1D(filters=1, kernel_size=10, strides=10, kernel_initializer = tf.keras.initializers.ones, use_bias = False, activation=None, padding='valid',input_shape=(100,1)))
model_a.add(Conv1D(filters=1, kernel_size=10, strides=10, kernel_initializer = tf.keras.initializers.ones, use_bias = False, activation=None, padding='valid',input_shape=(10,1)))
print(model_a.summary())
#Model A predict
predict_a = model_a.predict(X)
print(predict_a)
print(predict_a.shape)

#Model B
model_b = Sequential()
model_b.add(Conv1D(filters=1, kernel_size=10, strides=10, kernel_initializer = tf.keras.initializers.ones, use_bias = False, activation=None, padding='valid',input_shape=(100,1)))
#Make predict and add node after that
tmpPredict = model_b.predict(X)
#
model_b.add(Conv1D(filters=1, kernel_size=10, strides=10, kernel_initializer = tf.keras.initializers.ones, use_bias = False, activation=None, padding='valid',input_shape=(10,1)))
print(model_a.summary())
#Model B predict
predict_b = model_b.predict(X)
print(predict_b)
print(predict_b.shape)

模型 A 看起来不错,最终输出形状为 (1,1,1)。 但是模型 B 似乎无法在调用 predict() 函数之后添加新节点。为什么?

【问题讨论】:

  • TF新手,但运行后好像不能修改模型。

标签: python numpy tensorflow machine-learning keras


【解决方案1】:

构建模型后,Tensorflow 会自动创建一个静态计算图(构建发生在您第一次调用模型时)。这是根据documentationtf.keras.Sequential 的默认行为:

默认情况下,我们会尝试将您的模型编译为静态图以提供最佳执行性能。

要改为急切地运行模型,您可以通过在调用 model.predict 之前调用 tf.config.run_functions_eagerly(True) 来禁用此图形构建。急切地运行模型应该允许您在调用model.predict 之后添加层。 有关静态计算图的更多信息,请参阅https://www.tensorflow.org/guide/intro_to_graphs

【讨论】:

  • 酷..感谢这个清晰的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-10
  • 2013-04-29
  • 2017-12-22
  • 2022-01-07
  • 1970-01-01
  • 2017-12-31
  • 1970-01-01
相关资源
最近更新 更多