Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow ValueError:Tensor(“cnn/conv2d/kernel:0”,shape=(),dtype=resource)必须与Tensor(“占位符:0”,shape=(),dtype=variant”)来自同一图形_Tensorflow_Keras_Deep Learning_Cnn_Tensorflow Federated - Fatal编程技术网

Tensorflow ValueError:Tensor(“cnn/conv2d/kernel:0”,shape=(),dtype=resource)必须与Tensor(“占位符:0”,shape=(),dtype=variant”)来自同一图形

Tensorflow ValueError:Tensor(“cnn/conv2d/kernel:0”,shape=(),dtype=resource)必须与Tensor(“占位符:0”,shape=(),dtype=variant”)来自同一图形,tensorflow,keras,deep-learning,cnn,tensorflow-federated,Tensorflow,Keras,Deep Learning,Cnn,Tensorflow Federated,我是深入学习和TFF的新手。我需要使用CNN对来自EMNIST的图像进行分类。我看到了GitHub上名为图像分类联合学习的教程。我创建了一个名为CNN的网络,然后使用forward_pass函数来实例CNN模型来计算预测。但是TFF需要将模型变量作为可训练变量传递给TFF.learning.model。我打印CNN模型。变量。我不知道如何命名它们,所以我使用cnn\u conv2d\u kernel来表示cnn/conv2d/kernel。这是我的密码: 打印的模型变量为: variables:

我是深入学习和TFF的新手。我需要使用CNN对来自EMNIST的图像进行分类。我看到了GitHub上名为图像分类联合学习的教程。我创建了一个名为CNN的网络,然后使用forward_pass函数来实例CNN模型来计算预测。但是TFF需要将模型变量作为可训练变量传递给TFF.learning.model。我打印CNN模型。变量。我不知道如何命名它们,所以我使用cnn\u conv2d\u kernel来表示cnn/conv2d/kernel。这是我的密码:

打印的模型变量为:

variables: [<tf.Variable 'cnn/conv2d/kernel:0' shape=(5, 5, 1, 32) dtype=float32>, <tf.Variable 'cnn/conv2d/bias:0' shape=(32,) dtype=float32>, <tf.Variable 'cnn/conv2d_1/kernel:0' shape=(5, 5, 32, 64) dtype=float32>, <tf.Variable 'cnn/conv2d_1/bias:0' shape=(64,) dtype=float32>, <tf.Variable 'cnn/dense/kernel:0' shape=(3136, 1024) dtype=float32>, <tf.Variable 'cnn/dense/bias:0' shape=(1024,) dtype=float32>, <tf.Variable 'cnn/dense_1/kernel:0' shape=(1024, 10) dtype=float32>, <tf.Variable 'cnn/dense_1/bias:0' shape=(10,) dtype=float32>]
)

我的部分tff.learning.Model代码:

class MnistModel(tff.learning.Model):

  def __init__(self):
    self._variables = create_mnist_variables()

  #所有的“tf.Variables”都应该在“__init__”中引入
  @property
  def trainable_variables(self):
    #return [self._variables.weights, self._variables.bias]
    return [self._variables.cnn_conv2d_kernel,
        self._variables.cnn_conv2d_bias,
        self._variables.cnn_conv2d_1_kernel,
        self._variables.cnn_conv2d_1_bias,
        self._variables.cnn_dense_kernel,
        self._variables.cnn_dense_bias,
        self._variables.cnn_dense_1_kernel,
        self._variables.cnn_dense_1_bias
        ]
请原谅我的英语不好,请帮助我

现在,我有一个新问题:

ValueError: No gradients provided for any variable: ['cnn_conv2d_kernel:0', 'cnn_conv2d_bias:0', 'cnn_conv2d_1_kernel:0', 'cnn_conv2d_1_bias:0', 'cnn_dense_kernel:0', 'cnn_dense_bias:0', 'cnn_dense_1_kernel:0', 'cnn_dense_1_bias:0'].

对于这个用例,编写
tf.keras.Model
并使用tff将其转换为
tff.learning.Model
可能比直接子类化
tff.learning.Model更容易

在TFF中托管的研究代码中有一些这样做的例子;一个这样的指针是。该指针指向纯Keras模型;要在TFF中使用它,我们必须使用上面链接的
TFF.learning.from_keras_model
函数。如果您有一个包含图像和标签的
tf.data.Dataset
ds
,以及一个丢失函数
loss\u fn
,您可以通过调用以下命令获得一个
tff.learning.model

keras_model = create_keras_model()
tff_model = tff.learning.from_keras_model(
    keras_model=keras_model, loss=loss_fn, input_spec=ds.element_spec)
直接子类化一个
tff.learning.Model
是一个超级用户特性;例如,您需要编写本机TensorFlow来定义正向过程。为了开始深入学习,特别是TFF,我建议使用更高级别的API,如
tf.keras
和TFF的keras实用程序,方法如上所述

ValueError: No gradients provided for any variable: ['cnn_conv2d_kernel:0', 'cnn_conv2d_bias:0', 'cnn_conv2d_1_kernel:0', 'cnn_conv2d_1_bias:0', 'cnn_dense_kernel:0', 'cnn_dense_bias:0', 'cnn_dense_1_kernel:0', 'cnn_dense_1_bias:0'].
keras_model = create_keras_model()
tff_model = tff.learning.from_keras_model(
    keras_model=keras_model, loss=loss_fn, input_spec=ds.element_spec)