Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Python 3.x 如何使输入张量可训练_Python 3.x_Tensorflow_Keras - Fatal编程技术网

Python 3.x 如何使输入张量可训练

Python 3.x 如何使输入张量可训练,python-3.x,tensorflow,keras,Python 3.x,Tensorflow,Keras,下面是在优化过程中尝试使用输入图像作为训练变量的代码。它从keras模型开始,并将其转换为tensorflow模型。该张量流模型以张量作为输入,并尝试使用输入张量作为可训练变量来优化成本函数 错误是: NotImplementedError:(“正在尝试更新张量”,) 原因是输入张量不是一个变量。问题是如何使输入图像可训练或将张量转换为tf变量。感谢您的帮助: import tensorflow as tf from keras.models import Sequential, load_mo

下面是在优化过程中尝试使用输入图像作为训练变量的代码。它从keras模型开始,并将其转换为tensorflow模型。该张量流模型以张量作为输入,并尝试使用输入张量作为可训练变量来优化成本函数

错误是:

NotImplementedError:(“正在尝试更新张量”,)

原因是输入张量不是一个变量。问题是如何使输入图像可训练或将张量转换为tf变量。感谢您的帮助:

import tensorflow as tf
from keras.models import Sequential, load_model, Model
from keras import backend as K
from keras.layers.core import Dense, Dropout, Activation
import os
from tensorflow.python.framework import graph_util
from tensorflow.python.framework import graph_io

n_classes = 10

model = Sequential()
model.add(Dense(10, input_shape=(784,)))
model.add(Activation('relu'))                            
model.add(Dense(n_classes, name='logits'))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', metrics=['accuracy'],  optimizer='adam')

# Write the graph in binary .pb file
outdir = "model4_tf"
try:
    os.mkdir(outdir )
except:
    pass


prefix = "simple_nn" 
name = 'output_graph.pb'
# Alias the outputs in the model - this sometimes makes them easier to access in TF
pred = []
pred_node_names = []
for i, o in enumerate(model.outputs):
    pred_node_names.append(prefix+'_'+str(i))
    pred.append(tf.identity(o, 
                            name=pred_node_names[i]))
print('Output nodes names are: ', pred_node_names)


sess = K.get_session()


constant_graph = graph_util.convert_variables_to_constants(sess,                                         
sess.graph.as_graph_def(), pred_node_names)
graph_io.write_graph(constant_graph, outdir, name, as_text=False)


tf.reset_default_graph()

def load_graph(model_name):
    #graph = tf.Graph()
    graph = tf.get_default_graph()
    graph_def = tf.GraphDef()
    with open(model_name, "rb") as f:
        graph_def.ParseFromString(f.read())
    with graph.as_default():
        tf.import_graph_def(graph_def)
    return graph

my_graph = load_graph(model_name=os.path.join(outdir, name))


# In[15]:

input_op = my_graph.get_operation_by_name("import/dense_1_input")
output_op = my_graph.get_operation_by_name("import/simple_nn_0")
logit_op = my_graph.get_operation_by_name("import/logits/BiasAdd")


x_hat = input_op.outputs[0] # input tensor
labels = output_op.outputs[0] # label tensor
logits = logit_op.outputs[0] # logits tensor

learning_rate = tf.placeholder(tf.float32, ())

loss = tf.nn.softmax_cross_entropy_with_logits_v2(logits=logits, labels=[labels])
optim_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,     var_list=[x_hat])

您可以做的一件事是不使用优化器,而是使用获取输入梯度,并在TensorFlow之外对输入应用更新。但您也可以使用实际变量替换输入占位符,只需使用您想要优化的输入值。或者,关于第一个选项,您可以实际使用优化器,但只使用,然后实际应用TensorFlow(我没有尝试过,但我认为这应该可以工作,即使使用非变量).为什么不将输入转换为变量?这也应该是可能的。你能告诉我怎么做演员吗?一个人可以拿出一个代码来做梯度体面,但它违背了使用tensorflow的目的,它假设可以简化程序