Python Keras反向传播与自制反向传播

Python Keras反向传播与自制反向传播,python,tensorflow,keras,neural-network,backpropagation,Python,Tensorflow,Keras,Neural Network,Backpropagation,我有一个用keras构建的CNN,我的任务是运行训练数据的一个步骤,通过反向传播获得梯度,并将其与我计算的梯度进行比较 为了做到这一点,我需要权重和损失函数(期望输出和实现输出之间的差异,不管你怎么称呼它),但我似乎无法得到损失函数的实际值,我得到的只是一个张量,我猜它没有被计算 Tensor("loss/mul:0", shape=(), dtype=float32) <class 'tensorflow.python.framework.ops.Tensor'> 我必须调用什么

我有一个用keras构建的CNN,我的任务是运行训练数据的一个步骤,通过反向传播获得梯度,并将其与我计算的梯度进行比较

为了做到这一点,我需要权重和损失函数(期望输出和实现输出之间的差异,不管你怎么称呼它),但我似乎无法得到损失函数的实际值,我得到的只是一个张量,我猜它没有被计算

Tensor("loss/mul:0", shape=(), dtype=float32)
<class 'tensorflow.python.framework.ops.Tensor'>
我必须调用什么才能获得相同输入的损失函数

编辑2:

# Build the model.
model = Sequential()
model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(digits, activation='softmax'))

model.compile(loss = keras.losses.mean_squared_error,
              optimizer = keras.optimizers.Adadelta(),
              metrics=['accuracy'])
这是我的模型。这基本上是一个学校项目,所以我对keras和NN的总体来说显然是新手。我真的只有理论上的理解

编辑3:或者,如果对一个输入只运行一次NN的输出更容易,那对我来说也完全一样


编辑4:我只是使用model.predict来获得输出值,我可以自己使用这些值来计算损失。感谢您的帮助。

在tensorflow中,您只需构建图形即可。最后,您将执行一个session.run(feed_dict=a)和一个is字典来配置占位符。如果您向我提供您的问题的详细信息,我只能提供更多帮助。我的编辑是否有帮助?计算完权重后,您可以在图表的末尾再次计算损失函数,然后执行
sess.run(loss\u fun,feed\u dict=feed\u dict)
。这将返回loss函数
loss=sess.run(model.total\u loss,feed\u dict={model.input:x\u train})
-给了我一个错误,我可能是个白痴。“全损”不是我想要的吗?或者这不是我应该喂它的口述?错误是:
InvalidArgumentError(回溯见上文):必须为占位符张量'dense_2_sample_weights'提供一个值,其中包含dtype float和shape[?][[Node:dense_2_sample_weights=placeholder[dtype=DT_float,shape=[?],\u device=“/job:localhost/replica:0/任务:0/设备:CPU:0”]()][/code>,您已经将
densite\u 2\u sample\u权重配置为占位符,而不是
tf.Variable(tf.zeros([size\u x,size\u y]))
。如果某个内容是占位符,则必须在
feed\u dict
中提供一个值。在tensorflow中,如果没有占位符值,图形将无法运行。您只需构建图形。最后,您将执行一个session.run(feed_dict=a)和一个is字典来配置占位符。如果您向我提供您的问题的详细信息,我只能提供更多帮助。我的编辑是否有帮助?计算完权重后,您可以在图表的末尾再次计算损失函数,然后执行
sess.run(loss\u fun,feed\u dict=feed\u dict)
。这将返回loss函数
loss=sess.run(model.total\u loss,feed\u dict={model.input:x\u train})
-给了我一个错误,我可能是个白痴。“全损”不是我想要的吗?或者这不是我应该喂它的口述?错误是:
InvalidArgumentError(回溯见上文):必须为占位符张量'dense_2_sample_weights'提供一个值,其中包含dtype float和shape[?][[Node:dense_2_sample_weights=placeholder[dtype=DT_float,shape=[?],\u device=“/job:localhost/replica:0/任务:0/设备:CPU:0”]()][/code>,您已经将
densite\u 2\u sample\u权重配置为占位符,而不是
tf.Variable(tf.zeros([size\u x,size\u y]))
。如果某个内容是占位符,则必须在
feed\u dict
中提供一个值。没有占位符值,图形无法运行
# Build the model.
model = Sequential()
model.add(Conv2D(16, kernel_size=(3, 3), activation='relu', input_shape=input_shape))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(digits, activation='softmax'))

model.compile(loss = keras.losses.mean_squared_error,
              optimizer = keras.optimizers.Adadelta(),
              metrics=['accuracy'])