GOOGLE ADS

martes, 26 de abril de 2022

InvalidArgumentError: debe ingresar un valor para el tensor de marcador de posición 'Marcador de posición' con dtype float y forma

Escribí el siguiente código en mi Pycharm que conecta completamente la capa (FCL) en Tensorflow. El marcador de posición ocurre un error de argumento no válido. Así que ingresé todos los dtype, shapey nameen el marcador de posición, pero sigo recibiendo un error de argumento no válido.

Quiero hacer una nueva señal (1, 222) a través del modelo FCL.
Señal de entrada (1, 222) => Señal de salida (1, 222)


  • maxPredict: Encuentre el índice con el valor más alto en la señal de salida.

  • calculate Y: Obtenga el valor de la matriz de frecuencias correspondiente a maxPredict.

  • loss: Use la diferencia entre Y verdadero y calcule Y como una pérdida.

  • loss= tf.abs(verdaderoY - calcularY)`


Código (ocurre un error)
x = tf.placeholder(dtype=tf.float32, shape=[1, 222], name='inputX')

ERROR

InvalidArgumentError (ver arriba para el rastreo): debe ingresar un valor para el tensor de marcador de posición 'inputX' con dtype float y dar forma [1,222]
tensorflow.python.framework.errors_impl.InvalidArgumentError: debe ingresar un valor para el tensor de marcador de posición 'inputX' con dtype float and shape [1,222] [[{{node inputX}} = Placeholderdtype=DT_FLOAT, shape=[1,222], _device="/job:localhost/replica:0/task:0/device:CPU:0"]] Durante manejo de la excepción anterior, ocurrió otra excepción:

Nuevo caso de error

Cambié mi código.
x = tf.placeholder(tf.float32, [None, 222], name='inputX')

Caso de error 1
tensorFreq = tf.convert_to_tensor(basicFreq, tf.float32) newY = tf.gather(tensorFreq, maxPredict) * 60 loss = tf.abs(y - tf.Variable(newY))

ValueError: initial_value debe tener una forma especificada: Tensor("mul:0", shape=(?,), dtype=float32)

Caso de error 2
tensorFreq = tf.convert_to_tensor(basicFreq, tf.float32) newY = tf.gather(tensorFreq, maxPredict) * 60 loss = tf.abs(y - newY)

Rastreo (última llamada más reciente): Archivo "D:/PycharmProject/DetectionSignal/TEST_FCL_StackOverflow.py", línea 127, en trainStep = opt.minimize(loss) Archivo "C:\Users\Heewony\Anaconda3\envs\TSFW_pycharm\lib \site-packages\tensorflow\python\training\optimizer.py", línea 407, en minimizar ([str(v) for _, v in grads_and_vars], loss)) ValueError: No se proporcionan gradientes para ninguna variable, verifique su gráfico para operaciones que no admiten gradientes, entre variables [tf.Variable 'Variable:0' shape=(222, 1024) dtype=float32_ref, tf.Variable 'Variable_1:0' shape=(1024,) dtype=float32_re,......... tf.Variable 'Variable_5:0' forma=(222,) dtype=float32_ref] and loss Tensor("Abs:0", dtype=float32).

Entorno de desarrollo

  • Plataforma y distribución del sistema operativo: Windows 10 x64

  • TensorFlow instalado desde: Anaconda

  • Tensorflow versión 1.12.0:

  • pitón 3.6.7

  • Dispositivo móvil: N/A

  • Comando exacto para reproducir: N/A

  • Modelo de GPU y memoria: NVIDIA GeForce CTX 1080 Ti

  • CUDA / cuDNN: 9.0 / 7.4


Modelo y Función
def Model_FCL(inputX):
data = inputX # input Signals
# Fully Connected Layer 1
flatConvh1 = tf.reshape(data, [-1, 222])
fcW1 = tf.Variable(tf.truncated_normal(shape=[222, 1024], stddev=0.05))
fcb1 = tf.Variable(tf.constant(0.1, shape=[1024]))
fch1 = tf.nn.relu(tf.matmul(flatConvh1, fcW1) + fcb1)
# Fully Connected Layer 2
flatConvh2 = tf.reshape(fch1, [-1, 1024])
fcW2 = tf.Variable(tf.truncated_normal(shape=[1024, 1024], stddev=0.05))
fcb2 = tf.Variable(tf.constant(0.1, shape=[1024]))
fch2 = tf.nn.relu(tf.matmul(flatConvh2, fcW2) + fcb2)
# Output Layer
fcW3 = tf.Variable(tf.truncated_normal(shape=[1024, 222], stddev=0.05))
fcb3 = tf.Variable(tf.constant(0.1, shape=[222]))
logits = tf.add(tf.matmul(fch2, fcW3), fcb3)
predictY = tf.nn.softmax(logits)
return predictY, logits
def loadMatlabData(fileName):
contentsMat = sio.loadmat(fileName)
dataInput = contentsMat['dataInput']
dataLabel = contentsMat['dataLabel']
dataSize = dataInput.shape
dataSize = dataSize[0]
return dataInput, dataLabel, dataSize
def getNextSignal(num, data, labels, WINDOW_SIZE, OUTPUT_SIZE):
shuffleSignal = data[num]
shuffleLabels = labels[num]
# shuffleSignal = shuffleSignal.reshape(1, WINDOW_SIZE)
# shuffleSignal = np.asarray(shuffleSignal, np.float32)
return shuffleSignal, shuffleLabels
def getBasicFrequency():
# basicFreq => shape(222)
basicFreq = np.array([0.598436736688, 0.610649731314,... 3.297508549096])
return basicFreq

Grafico
basicFreq = getBasicFrequency()
myGraph = tf.Graph()
with myGraph.as_default():
# define input data & output data 입력받기 위한 placeholder
x = tf.placeholder(dtype=tf.float32, shape=[1, 222], name='inputX') # Signal size = [1, 222]
y = tf.placeholder(tf.float32, name='trueY') # Float value size = [1]
print('inputzz ', x, y)
print('Graph ', myGraph.get_operations())
print('TrainVariable ', tf.trainable_variables())
predictY, logits = Model_FCL(x) # Predict Signal, size = [1, 222]
maxPredict = tf.argmax(predictY, 1, name='maxPredict') # Find max index of Predict Signal
tensorFreq = tf.convert_to_tensor(basicFreq, tf.float32)
newY = tf.gather(tensorFreq, maxPredict) * 60 # Find the value that corresponds to the Freq array index
loss = tf.abs(y - tf.Variable(newY)) # Calculate absolute (true Y - predict Y)
opt = tf.train.AdamOptimizer(learning_rate=0.0001)
trainStep = opt.minimize(loss)
print('Graph ', myGraph.get_operations())
print('TrainVariable ', tf.trainable_variables())

Session
with tf.Session(graph=myGraph) as sess:
sess.run(tf.global_variables_initializer())
dataFolder = './'
writer = tf.summary.FileWriter('./logMyGraph', sess.graph)
startTime = datetime.datetime.now()
numberSummary = 0
accuracyTotalTrain = []
for trainEpoch in range(1, 25 + 1):
arrayTrain = []
dataPPG, dataLabel, dataSize = loadMatlabData(dataFolder + "TestValues.mat")
for i in range(dataSize):
batchSignal, valueTrue = getNextSignal(i, dataPPG, dataLabel, 222, 222)
_, lossPrint, valuePredict = sess.run([trainStep, loss, newY], feed_dict={x: batchSignal, y: valueTrue})
print('Train ', i, ' ', valueTrue, ' - ', valuePredict, ' Loss ', lossPrint)
arrayTrain.append(lossPrint)
writer.add_summary(tf.Summary(value=[tf.Summary.Value(tag='Loss', simple_value=float(lossPrint))]),
numberSummary)
numberSummary += 1
accuracyTotalTrain.append(np.mean(arrayTrain))
print('Final Train: ', accuracyTotalTrain)
sess.close()


Solución del problema

Parece que la variable batchSignaltiene un tipo o forma incorrectos. Debe ser una matriz numpy de forma exactamente [1, 222]. Si desea utilizar un lote de ejemplos de tamaño n × 222, el marcador de posición xdebe tener una forma de y una forma de [None, 222]marcador de posición.y[None]

Por cierto, considere usar tf.layers.densevariables en lugar de inicializarlas explícitamente e implementar las capas usted mismo.

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...