Tensorflow: Como modificar o valor em tensor
Como preciso escrever alguns pré-processos para os dados antes de usar o Tensorflow para treinar modelos, algumas modificações notensor
é preciso. No entanto, não tenho idéia de como modificar os valores emtensor
como o caminho usandonumpy
.
A melhor maneira de fazer isso é poder modificartensor
diretamente. No entanto, parece não ser possível na versão atual do Tensorflow. Uma maneira alternativa está mudandotensor
parandarray
para o processo e, em seguida, usetf.convert_to_tensor
mudar de volta.
A chave é como mudartensor
parandarray
.
1)tf.contrib.util.make_ndarray(tensor)
: https://www.tensorflow.org/versions/r0.8/api_docs/python/contrib.util.html#make_ndarray
Parece a maneira mais fácil conforme o documento, mas não consigo encontrar essa função na versão atual do Tensorflow. Segundo, a entrada éTensorProto
ao invés detensor
.
2) Usea.eval()
copiara
para outrondarray
No entanto, ele funciona apenas no uso detf.InteractiveSession()
no caderno.
Um caso simples com códigos é mostrado abaixo. O objetivo deste código é fazer com que otfc
tem a mesma saída quenpc
após o processo.
DICA
Você deveria tratar issotfc
enpc
são independentes entre si. Isso atende à situação em que, inicialmente, os dados recuperados do treinamento estão emtensor
formato comtf.placeholder()
.
Código fonte
import numpy as np
import tensorflow as tf
tf.InteractiveSession()
tfc = tf.constant([[1.,2.],[3.,4.]])
npc = np.array([[1.,2.],[3.,4.]])
row = np.array([[.1,.2]])
print('tfc:\n', tfc.eval())
print('npc:\n', npc)
for i in range(2):
for j in range(2):
npc[i,j] += row[0,j]
print('modified tfc:\n', tfc.eval())
print('modified npc:\n', npc)
Resultado:
tfc:
[[1. 2.]
[3. 4.]]
npc:
[[1. 2.]
[3. 4.]]
tfc modificado:
[[1. 2.]
[3. 4.]]
NPC modificado:
[[1.1 2.2]
[3,1 4,2]]