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
, shape
y name
en 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:
Cambié mi código.x = tf.placeholder(tf.float32, [None, 222], name='inputX')
Caso de error 1tensorFreq = 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 2tensorFreq = 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 batchSignal
tiene 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 x
debe tener una forma de y una forma de [None, 222]
marcador de posición.y
[None]
Por cierto, considere usar tf.layers.dense
variables en lugar de inicializarlas explícitamente e implementar las capas usted mismo.
No hay comentarios.:
Publicar un comentario