Я написал следующий код в моем Pycharm, который выполняет Fully Connect Layer (FCL) в Tensorflow.Заполнитель случается неверный аргумент ошибки.Поэтому я ввел все dtype
, shape
и name
в качестве заполнителя, но я все еще получаю недопустимая ошибка аргумента .
Я хочу создать новый сигнал (1,222) - модель FCL.
входной сигнал (1, 222) => выходной сигнал (1, 222)
maxPredict
: Найти индекс с наибольшим значением в выходном сигнале. calculate Y
: получить значение массива частот, соответствующее maxPredict. loss
: использовать разницу между истинным Y и рассчитать Y как убыток. loss
= tf.abs (trueY - рассчитатьY) `
Код (возникает ошибка)
x = tf.placeholder(dtype=tf.float32, shape=[1, 222], name='inputX')
ОШИБКА
InvalidArgumentError (см. Выше для отслеживания): вы должны передать значение для тензора-заполнителя 'inputX' с dtype float и shape [1,222] тензор потока.python.framework.errors_impl.InvalidArgumentError: Вы должны передать значение для тензора заполнителя 'inputX' с плавающей точкой dtype и формой [1,222] [[{{node inputX}} = Placeholderdtype = DT_FLOAT, shape = [1,222], _device = "/ job: localhost / replica:0 / задача: 0 / устройство: ЦП: 0 "]] Во время обработки вышеуказанного исключения произошло другое исключение:
Новый случай ошибки
Я изменил свой код.
x = tf.placeholder(tf.float32, [None, 222], name='inputX')
Ошибка: случай 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 должен иметь указанную форму: Tensor ("mul: 0", shape = (?,), dtype = float32)
Ошибка: случай 2
tensorFreq = tf.convert_to_tensor(basicFreq, tf.float32)
newY = tf.gather(tensorFreq, maxPredict) * 60
loss = tf.abs(y - newY)
Traceback (последний вызов был последним): Файл "D: /PycharmProject/DetectionSignal/TEST_FCL_StackOverflow.py", строка 127, вtrainStep = opt.minimize (потеря) Файл "C: \ Users \ Heewony \ Anaconda3 \ envs \ TSFW_pycharm \ lib \ site-packages \ tenorsflow \ python \ training \ optimizer.py", строка 407, в минимизации ([str (v) для _, v в grads_and_vars], потеря)) ValueError: Градиенты не указаны ни для одной переменной, проверьте график на наличие операций, которые не поддерживают градиенты , между переменными [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' shape = (222,) dtype = float32_ref] и Tensor потерь («Abs: 0», dtype = float32) .
Среда разработки
- Платформа и распространение ОС: Windows 10 x64
- TensorFlow установлен из: Anaconda
- Tensorflow версия 1.12.0:
- python 3.6.7:
- Мобильное устройство: N / A
- Точная команда для воспроизведения: N / A
- Модель и память графического процессора: NVIDIA GeForce CTX 1080 Ti
- CUDA / cuDNN: 9,0 / 7,4
Модель и функция
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
График
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())
Сеанс
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()