张量流评估和提前停止给出无限溢出错误
tensorflow evalutaion and earlystopping gives infinity overflow error
我在下面的代码中看到了一个模型,但是当尝试对其进行评估或对其使用提前停止时,它会出现以下错误:
numdigits = int(np.log10(self.target)) + 1
OverflowError: cannot convert float infinity to integer
我必须声明,不使用 .EarlyStopping
或 model.evaluate
一切正常。
我知道 np.log10(0)
给出 -inf
所以这可能是一个潜在的原因,但为什么首先会有 0
并且如何预防?如何解决这个问题?
注意事项
这是我使用的代码:
import tensorflow as tf
from tensorflow import keras
TRAIN_PERCENT = 0.9
model = keras.Sequential([
keras.layers.Dense(128, input_shape=(100,), activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(100)
])
earlystop_callback = keras.callbacks.EarlyStopping(min_delta=0.0001, patience=1
, monitor='accuracy'
)
optimizer = keras.optimizers.Adam(lr=0.01)
model.compile(optimizer=optimizer, loss="mse", metrics=['accuracy'])
X_set, Y_set = some_get_data_function()
sep = int(len(X_set)/TRAIN_PERCENT)
X_train, Y_train = X_set[:sep], Y_set[:sep]
X_test, Y_test = X_set[sep:], Y_set[sep:]
model.fit(X_train, Y_train, batch_size=16, epochs=5, callbacks=[earlystop_callback])
ev = model.evaluate(X_test, Y_test)
print(ev)
X,Y 集合是 np
数组。 X 是 0
和 10
之间的 100 个整数数组的数组。 Y 是一个由 100 个整数组成的数组,它们都是 0
或 1
.
好吧,很难说清楚,因为我不能 运行 没有 some_get_data_function()
实现的代码,但最近我在 错误地传递了 EMPTY 数组 [=15] 时遇到了同样的错误=] 到 model.evaluate
。考虑到@meTchaikovsky 的评论解决了您的问题,这肯定是由于输入数组混乱造成的。
在我的例子中,数据很小——所以做类似
的事情
cached_train = train.shuffle(100_000).batch(8192).cache()
cached_test = test.batch(4096).cache()
会导致空 cached_test
!这不影响 model.fit
所以请始终使用 cached_test.__len__()
检查数据的长度,以确保您没有将空数据传递给函数。
我在下面的代码中看到了一个模型,但是当尝试对其进行评估或对其使用提前停止时,它会出现以下错误:
numdigits = int(np.log10(self.target)) + 1
OverflowError: cannot convert float infinity to integer
我必须声明,不使用 .EarlyStopping
或 model.evaluate
一切正常。
我知道 np.log10(0)
给出 -inf
所以这可能是一个潜在的原因,但为什么首先会有 0
并且如何预防?如何解决这个问题?
注意事项
这是我使用的代码:
import tensorflow as tf
from tensorflow import keras
TRAIN_PERCENT = 0.9
model = keras.Sequential([
keras.layers.Dense(128, input_shape=(100,), activation='relu'),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(100)
])
earlystop_callback = keras.callbacks.EarlyStopping(min_delta=0.0001, patience=1
, monitor='accuracy'
)
optimizer = keras.optimizers.Adam(lr=0.01)
model.compile(optimizer=optimizer, loss="mse", metrics=['accuracy'])
X_set, Y_set = some_get_data_function()
sep = int(len(X_set)/TRAIN_PERCENT)
X_train, Y_train = X_set[:sep], Y_set[:sep]
X_test, Y_test = X_set[sep:], Y_set[sep:]
model.fit(X_train, Y_train, batch_size=16, epochs=5, callbacks=[earlystop_callback])
ev = model.evaluate(X_test, Y_test)
print(ev)
X,Y 集合是 np
数组。 X 是 0
和 10
之间的 100 个整数数组的数组。 Y 是一个由 100 个整数组成的数组,它们都是 0
或 1
.
好吧,很难说清楚,因为我不能 运行 没有 some_get_data_function()
实现的代码,但最近我在 错误地传递了 EMPTY 数组 [=15] 时遇到了同样的错误=] 到 model.evaluate
。考虑到@meTchaikovsky 的评论解决了您的问题,这肯定是由于输入数组混乱造成的。
在我的例子中,数据很小——所以做类似
的事情cached_train = train.shuffle(100_000).batch(8192).cache()
cached_test = test.batch(4096).cache()
会导致空 cached_test
!这不影响 model.fit
所以请始终使用 cached_test.__len__()
检查数据的长度,以确保您没有将空数据传递给函数。