Tensorflow:如何插入未知张量?
Tensorflow: How to insert an unknown tensor?
我想序列化 LSTM 模型的输入数据,例如,
import numpy as np
import tensorflow as tf
input_x=np.array([[1,2,1,2,1,2],[3,4,3,4,3,4],[10,20,1,2,1,2],[30,40,3,4,3,4],[100,200,1,2,1,2],[300,400,3,4,3,4]])#shape:6-6
# x = tf.placeholder(tf.float32,[None,6])
x=input_x
x_copy=x.copy()
# x_copy=tf.identity(x)
batch_size=6
n_steps=2
count=0
for i in range(int(batch_size/n_steps)-1):#total insert
for j in range(n_steps-1):
for k in range(n_steps):
x_copy=np.insert(x_copy,(i+1)*n_steps+count,x[i*n_steps+j+k+1],axis=0)
count+=1
res=x_copy
print('input_x\n',input_x)
print('res\n',res)
输出结果如下:
input_x
[[ 1 2 1 2 1 2]
[ 3 4 3 4 3 4]
[ 10 20 1 2 1 2]
[ 30 40 3 4 3 4]
[100 200 1 2 1 2]
[300 400 3 4 3 4]]
res
[[ 1 2 1 2 1 2]
[ 3 4 3 4 3 4]
[ 3 4 3 4 3 4]
[ 10 20 1 2 1 2]
[ 10 20 1 2 1 2]
[ 30 40 3 4 3 4]
[ 30 40 3 4 3 4]
[100 200 1 2 1 2]
[100 200 1 2 1 2]
[300 400 3 4 3 4]]
因为我设置了n_steps=2,所以除了第一行和最后一行之外,数据会重复一次。
但是,现在我想用张量而不是array.And来操作代码更改如下:
import numpy as np
import tensorflow as tf
input_x=np.array([[1,2,1,2,1,2],[3,4,3,4,3,4],[10,20,1,2,1,2],[30,40,3,4,3,4],[100,200,1,2,1,2],[300,400,3,4,3,4]])#shape:6-6
x = tf.placeholder(tf.float32,[None,6])
# x=input_x
# x_copy=x.copy()
x_copy=tf.identity(x)
batch_size=6
n_steps=2
count=0
for i in range(int(batch_size/n_steps)-1):#total insert
for j in range(n_steps-1):
for k in range(n_steps):
x_copy=np.insert(x_copy,(i+1)*n_steps+count,x[i*n_steps+j+k+1],axis=0)
count+=1
res=x_copy
# print('input_x\n',input_x)
# print('res\n',res)
with tf.Session() as sess:
tf.global_variables_initializer().run()
batch_x=input_x
result=sess.run([res,],feed_dict={
x:batch_x,
})
print('result\n',result)
然后我遇到了一个错误,可以显示如下:
TypeError: Fetch argument array(<tf.Tensor 'strided_slice_3:0' shape=(6,) dtype=float32>,
dtype=object) has invalid type <class 'numpy.ndarray'>, must be a string or Tensor. (Can not convert a ndarray into a Tensor or Operation.)
我认为所有的变量都应该是张量,但我得到了类型错误,表明我提供了一个数组类型。
有人知道吗?希望得到您的帮助,谢谢!
# for i in range(int(batch_size-n_steps)+1):#total insert
# for k in range(n_steps):
# hidden1_copy_tmp=tf.slice(hidden1, [k+i, 0], [1, hidden1.shape[1]])
# if hidden1_copy== None:
# hidden1_copy=hidden1_copy_tmp
# else:
# hidden1_copy=tf.concat([hidden1_copy, hidden1_copy_tmp], 0)
我想序列化 LSTM 模型的输入数据,例如,
import numpy as np
import tensorflow as tf
input_x=np.array([[1,2,1,2,1,2],[3,4,3,4,3,4],[10,20,1,2,1,2],[30,40,3,4,3,4],[100,200,1,2,1,2],[300,400,3,4,3,4]])#shape:6-6
# x = tf.placeholder(tf.float32,[None,6])
x=input_x
x_copy=x.copy()
# x_copy=tf.identity(x)
batch_size=6
n_steps=2
count=0
for i in range(int(batch_size/n_steps)-1):#total insert
for j in range(n_steps-1):
for k in range(n_steps):
x_copy=np.insert(x_copy,(i+1)*n_steps+count,x[i*n_steps+j+k+1],axis=0)
count+=1
res=x_copy
print('input_x\n',input_x)
print('res\n',res)
输出结果如下:
input_x
[[ 1 2 1 2 1 2]
[ 3 4 3 4 3 4]
[ 10 20 1 2 1 2]
[ 30 40 3 4 3 4]
[100 200 1 2 1 2]
[300 400 3 4 3 4]]
res
[[ 1 2 1 2 1 2]
[ 3 4 3 4 3 4]
[ 3 4 3 4 3 4]
[ 10 20 1 2 1 2]
[ 10 20 1 2 1 2]
[ 30 40 3 4 3 4]
[ 30 40 3 4 3 4]
[100 200 1 2 1 2]
[100 200 1 2 1 2]
[300 400 3 4 3 4]]
因为我设置了n_steps=2,所以除了第一行和最后一行之外,数据会重复一次。
但是,现在我想用张量而不是array.And来操作代码更改如下:
import numpy as np
import tensorflow as tf
input_x=np.array([[1,2,1,2,1,2],[3,4,3,4,3,4],[10,20,1,2,1,2],[30,40,3,4,3,4],[100,200,1,2,1,2],[300,400,3,4,3,4]])#shape:6-6
x = tf.placeholder(tf.float32,[None,6])
# x=input_x
# x_copy=x.copy()
x_copy=tf.identity(x)
batch_size=6
n_steps=2
count=0
for i in range(int(batch_size/n_steps)-1):#total insert
for j in range(n_steps-1):
for k in range(n_steps):
x_copy=np.insert(x_copy,(i+1)*n_steps+count,x[i*n_steps+j+k+1],axis=0)
count+=1
res=x_copy
# print('input_x\n',input_x)
# print('res\n',res)
with tf.Session() as sess:
tf.global_variables_initializer().run()
batch_x=input_x
result=sess.run([res,],feed_dict={
x:batch_x,
})
print('result\n',result)
然后我遇到了一个错误,可以显示如下:
TypeError: Fetch argument array(<tf.Tensor 'strided_slice_3:0' shape=(6,) dtype=float32>,
dtype=object) has invalid type <class 'numpy.ndarray'>, must be a string or Tensor. (Can not convert a ndarray into a Tensor or Operation.)
我认为所有的变量都应该是张量,但我得到了类型错误,表明我提供了一个数组类型。
有人知道吗?希望得到您的帮助,谢谢!
# for i in range(int(batch_size-n_steps)+1):#total insert
# for k in range(n_steps):
# hidden1_copy_tmp=tf.slice(hidden1, [k+i, 0], [1, hidden1.shape[1]])
# if hidden1_copy== None:
# hidden1_copy=hidden1_copy_tmp
# else:
# hidden1_copy=tf.concat([hidden1_copy, hidden1_copy_tmp], 0)