繁体   English   中英

由于自定义度量函数,Keras 中的磁带状态无效错误

[英]Invalid tape state error in Keras due to custom metric function

因此,我在尝试在 Keras 中实现基于 SSIM 的度量函数时遇到了一些麻烦。

我的度量函数是:

@tf.function
def custom_ssim(y_actual, y_predicted):

    y_pred_aux = tf.argmax(y_predicted, axis=-1)
    y_pred_aux = tf.expand_dims(y_pred_aux, axis=3)
    y_pred_aux = tf.cast(y_pred_aux, np.float64)

    y_actual_aux = tf.argmax(y_actual, axis=-1)
    y_actual_aux = tf.expand_dims(y_actual_aux, axis=3)
    y_actual_aux = tf.cast(y_actual_aux, np.float64)

    return 1 - tf.image.ssim(y_actual_aux, y_pred_aux, max_val=7)

尝试编译模型时收到的错误消息如下:

内部错误:磁带状态无效。

我已经尝试不使用@tf.function装饰器,只是为了得到以下错误消息:

ValueError: 没有为任何变量提供梯度:['conv0/kernel:0', 'conv0/bias:0', 'conv1/kernel:0', 'conv1/bias:0', 'conv2/kernel:0', “conv2/bias:0”、“conv3/kernel:0”、“conv3/bias:0”、“conv4/kernel:0”、“conv4/bias:0”、“deconv0/kernel:0”、“deconv0” /bias:0', 'deconv1/kernel:0', 'deconv1/bias:0', 'deconv2/kernel:0', 'deconv2/bias:0', 'deconv3/kernel:0', 'deconv3/bias :0', 'deconv4/kernel:0', 'deconv4/bias:0']。

尝试使用.numpy()将函数中的张量转换为 NumPy 数组也不起作用。

我正在使用 Tensorflow-GPU 2.0 和 Python 3.6。

当您只传递训练数据而错过传递model.fit()的标签时,您会收到此错误。 我能够使用以下代码重新创建您的错误。 你可以从这里下载我在程序中使用的数据集。

重新创建问题的代码 -

%tensorflow_version 2.x
# MLP for Pima Indians Dataset saved to single file
import numpy as np
from numpy import loadtxt
import tensorflow as tf
print(tf.__version__)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# load pima indians dataset
dataset = np.loadtxt("/content/pima-indians-diabetes.csv", delimiter=",")

# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]

# define model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

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

# Model Summary
#model.summary()

# Fit the model
model.fit(X, epochs=150, batch_size=10, verbose=0)

输出 -

2.2.0
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-4-7ddca8f2992e> in <module>()
     28 
     29 # Fit the model
---> 30 model.fit(X, epochs=150, batch_size=10, verbose=0)

10 frames
/usr/local/lib/python3.6/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args, **kwargs)
    966           except Exception as e:  # pylint:disable=broad-except
    967             if hasattr(e, "ag_error_metadata"):
--> 968               raise e.ag_error_metadata.to_exception(e)
    969             else:
    970               raise

ValueError: in user code:

    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:571 train_function  *
        outputs = self.distribute_strategy.run(
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:951 run  **
        return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
        return self._call_for_each_replica(fn, args, kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2649 _call_for_each_replica
        return fn(*args, **kwargs)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:541 train_step  **
        self.trainable_variables)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:1804 _minimize
        trainable_variables))
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py:521 _aggregate_gradients
        filtered_grads_and_vars = _filter_grads(grads_and_vars)
    /usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/optimizer_v2/optimizer_v2.py:1219 _filter_grads
        ([v.name for _, v in grads_and_vars],))

    ValueError: No gradients provided for any variable: ['dense_5/kernel:0', 'dense_5/bias:0', 'dense_6/kernel:0', 'dense_6/bias:0', 'dense_7/kernel:0', 'dense_7/bias:0'].

解决方案 -model.fit()传递训练标签,您的错误将得到修复。

修改的,

model.fit(X , epochs=150, batch_size=10, verbose=0)

model.fit(X , Y, epochs=150, batch_size=10, verbose=0)

代码 -

%tensorflow_version 2.x
# MLP for Pima Indians Dataset saved to single file
import numpy as np
from numpy import loadtxt
import tensorflow as tf
print(tf.__version__)
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

# load pima indians dataset
dataset = np.loadtxt("/content/pima-indians-diabetes.csv", delimiter=",")

# split into input (X) and output (Y) variables
X = dataset[:,0:8]
Y = dataset[:,8]

# define model
model = Sequential()
model.add(Dense(12, input_dim=8, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

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

# Model Summary
#model.summary()

# Fit the model
model.fit(X , Y, epochs=150, batch_size=10, verbose=0)

输出 -

2.2.0
<tensorflow.python.keras.callbacks.History at 0x7f9208433eb8>

如果仍未修复,请分享该错误的可重现代码。 很乐意提供帮助。

希望这能回答你的问题。 快乐学习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM