gpt4 book ai didi

python - 热修复 Tensorflow 模型未使用 .fit() 在 Eager 模式下运行?

转载 作者:太空狗 更新时间:2023-10-30 01:24:39 25 4
gpt4 key购买 nike

我正在尝试在 Eager Execution 中运行基本的 CNN keras 模型,但 Tensorflow 拒绝将模型视为 Eager。我最初在稳定的 1.13 分支(最新)中尝试过此操作,确保启用急切执行但没有结果。我升级到 2.0(最新)但还是没有。

型号

class CNN2(tf.keras.Model):

def __init__(self, num_classes=7):
super(CNN2, self).__init__()
self.cnn1 = tf.keras.layers.Conv2D(32, (5,5), padding='same', strides=(2, 2),
kernel_initializer='he_normal')
self.bn1 = tf.keras.layers.BatchNormalization()
self.cnn2 = tf.keras.layers.Conv2D(64, (5,5), padding='same', strides=(2, 2),
kernel_initializer='he_normal')
self.cnn3 = tf.keras.layers.Conv2D(128, (5,5), padding='same', strides=(2, 2),
kernel_initializer='he_normal')
self.bn2 = tf.keras.layers.BatchNormalization()
self.pool = tf.keras.layers.MaxPooling2D((2,2))
self.dnn1 = tf.keras.layers.Dense(128)
self.dropout1 = tf.keras.layers.Dropout(0.45)
self.flatten = tf.keras.layers.Flatten()
self.dnn2 = tf.keras.layers.Dense(512)
self.dnn3 = tf.keras.layers.Dense(256)
self.classifier = tf.keras.layers.Dense(num_classes)

def simpleLoop(self, inputs, x):
#x_Numpy = x.numpy(),
for i, input in inputs:
print("{0} - {1}".format(i,len(input)))

def call(self, inputs, training=None, mask=None):
print(tf.executing_eagerly())
x = tf.nn.leaky_relu(self.cnn1(inputs))
x = self.bn1(x)
x = self.pool(x)
x = tf.nn.leaky_relu(x)
x = tf.nn.leaky_relu(self.bn2(self.cnn2(x)))
x = self.pool(x)
x = self.dropout1(tf.nn.leaky_relu(self.cnn3(x)))
x = self.flatten(x)
self.simpleLoop(inputs, x)
x = self.dropout1(self.dnn1(x))
x = self.dropout1(self.dnn2(x))
x = self.dropout1(self.dnn3(x))
output = self.classifier(x)

#with tf.device('/cpu:0'):
output = tf.nn.softmax(output)

return output

参数设置

batch_size = 50
epochs = 150
num_classes = 7

检查 Eager 是否开启和版本

print(tf.executing_eagerly())
print(tf.__version__)
>>True
>>2.0.0-alpha0

运行模型

modelE = CNN2(num_classes)
modelE.run_eagerly = True
print(modelE.run_eagerly)


#model = CNN2(num_classes)
modelE.compile(optimizer=tf.optimizers.Adam(0.00008), loss='categorical_crossentropy',
metrics=['accuracy'], run_eagerly=True)

# TF Keras tries to use entire dataset to determine shape without this step when using .fit()
# Fix = Use exactly one sample from the provided input dataset to determine input/output shape/s for the model
dummy_x = tf.zeros((1, size, size, 1))
modelE._set_inputs(dummy_x)

# Train
hist = modelE.fit(x_train, y_train, batch_size=batch_size, epochs=epochs,
validation_data=(x_test, y_test), verbose=1)

# Evaluate on test set
scores = modelE.evaluate(x_test, y_test, batch_size, verbose=1)

这会导致错误AttributeError: 'Tensor' 对象没有属性 'numpy'

当我删除有问题的行 x.numpy() 时,我得到了这个错误TypeError:Tensor 对象仅在启用急切执行时才可迭代。要迭代此张量,请使用 tf.map_fn。

它还会为位于模型的 def call() 方法中的 print(tf.executing_eagerly()) 打印 False。


如何强制它进入急切模式而不是图表?我再次在最新的 1.13 和 2.0 中尝试了这个。这是错误吗?

最佳答案

tensorflow==2.0.0 中找到适合我的解决方案花了一段时间,所以我想在这里分享它,以防它也能帮助其他人:

model.compile(run_eagerly=True)

如果这不起作用,您可以尝试在模型编译后强制执行:

model.compile()
model.run_eagerly = True

关于python - 热修复 Tensorflow 模型未使用 .fit() 在 Eager 模式下运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56062017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com