不兼容的形状:[1020,1,1] 与 [1019,1,1] - Tensorflow
Imcompatible shapes: [1020,1,1] vs. [1019,1,1] - Tensorflow
将我的神经网络输出设置为 1 时出现问题,它在数据数组中出现问题,指责哪个形状更大,如果我使用 periods = len(valuesAnalisys) - 1
,一切正常!
时期:
periods = 1
返回:
Imcompatible shapes: [1020,1,1] vs. [1019,1,1]
神经网络:
datecollect = [x[0] for x in dataSet]
servers = [x[1] for x in dataSet]
valuesAnalisys = [float(x[2]) for x in dataSet]
base = np.array(valuesAnalisys)
periods = 1
future_forecast = 1
X = base[0:(len(base) - (len(base) % periods))]
X_batches = X.reshape(-1, periods, 1)
y = base[1:(len(base) - (len(base) % periods)) + future_forecast]
y_batches = y.reshape(-1, periods, 1)
X_test = base[-(periods + future_forecast):]
X_test = X_test[:periods]
X_test = X_test.reshape(-1, periods, 1)
y_test = base[-(periods):]
y_test = y_test.reshape(-1, periods, 1)
tf.reset_default_graph()
appetizer = 1
hidden_neurons = 100
exit_neurons = 1
xph = tf.placeholder(tf.float32, [None, periods, appetizer])
yph = tf.placeholder(tf.float32, [None, periods, exit_neurons])
cell = tf.contrib.rnn.BasicRNNCell(num_units = hidden_neurons, activation = tf.nn.relu)
cell = tf.contrib.rnn.OutputProjectionWrapper(cell, output_size = 1)
exit_rnn, _ = tf.nn.dynamic_rnn(cell, xph, dtype = tf.float32)
calculateError = tf.losses.mean_squared_error(labels = yph, predictions = exit_rnn)
otimizador = tf.train.AdamOptimizer(learning_rate = 0.001)
training = otimizador.minimize(calculateError)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(2000):
_, cost = sess.run([training, calculateError], feed_dict = {xph: X_batches, yph: y_batches})
if epoch % 100 == 0:
print("[INFO] Epoch: {} - Level Error: {}".format(epoch,cost))
forecast = sess.run(exit_rnn, feed_dict = {xph: X_test})
y_test.shape
y_test2 = np.ravel(y_test)
final_forecast = np.ravel(forecast)
mae = mean_absolute_error(y_test2, final_forecast)
for (host, forecast, date) in list(zip(servers, final_forecast, datecollect)):
send.postForecastMemory(host, forecast, cost, date)
输出:
A:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set. If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU. To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1356, in _do_call
return fn(*args)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1341, in _run_fn
options, feed_dict, fetch_list, target_list, run_metadata)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1429, in _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [1020,1,1] vs. [1019,1,1]
[[{{node gradients/mean_squared_error/SquaredDifference_grad/BroadcastGradientArgs}}]]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "teste.py", line 61, in <module>
_, custo = sess.run([treinamento, erro], feed_dict = {xph: X_batches, yph: y_batches})
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 950, in run
run_metadata_ptr)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1173, in _run
feed_dict_tensor, options, run_metadata)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1350, in _do_run
run_metadata)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1370, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [1020,1,1] vs. [1019,1,1]
[[node gradients/mean_squared_error/SquaredDifference_grad/BroadcastGradientArgs (defined at teste.py:55) ]]
形状:
[INFO] base shape: (1020,)
[INFO] X shape: (1019,)
[INFO] X batches shape: (1, 1019, 1)
[INFO] Y batches shape: (1, 1019, 1)
[INFO] X teste shape: (1, 1019, 1)
[INFO] Y teste shape: (1, 1019, 1)
罪魁祸首似乎是您的 RNN 单元中的固定时间维度。
xph = tf.placeholder(tf.float32, [None, periods, appetizer])
yph = tf.placeholder(tf.float32, [None, periods, exit_neurons])
cell = tf.contrib.rnn.BasicRNNCell(num_units = hidden_neurons, activation = tf.nn.relu)
在这里,您在 xph 和 yph 中都将时间维度指定为句点。所以,如果你有更长或更短的信号,就会出现错误。
我无法推断出模型层的确切尺寸,因为您没有指定输入形状或模型摘要。所以,使用占位符数字。
有两个可能的修复方法。
- 不要使用固定的时间维度 = 周期,而是使用 None。
xph = tf.placeholder(tf.float32, [None, None, appetizer])
yph = tf.placeholder(tf.float32, [None, None, exit_neurons])
但是,缺点是你必须在每批中有相同长度的信号,或者你可以简单地使用批大小 = 1 来训练而不用担心时间长度。
- 使用truncating/padding解决长度问题。只需将您的信号传递给预处理函数即可添加/删除额外的时间点。
import numpy as np
def pre_process(x, fixed_len = 1000): # x.shape -> (100, 1000, 1)
if x.shape[1] >= fixed_len:
return x[:,:fixed_len,:]
else:
z_ph = np.zeros((x.shape[0], fixed_len, x.shape[2]))
z_ph[:,:x.shape[1],:] = x
return z_ph
X_batches = pre_process(X_batches, YOU_CHOOSE_THIS_LENGTH) # based on the length of your data
X_test = pre_process(X_test, YOU_CHOOSE_THIS_LENGTH)
将我的神经网络输出设置为 1 时出现问题,它在数据数组中出现问题,指责哪个形状更大,如果我使用 periods = len(valuesAnalisys) - 1
,一切正常!
时期:
periods = 1
返回:
Imcompatible shapes: [1020,1,1] vs. [1019,1,1]
神经网络:
datecollect = [x[0] for x in dataSet]
servers = [x[1] for x in dataSet]
valuesAnalisys = [float(x[2]) for x in dataSet]
base = np.array(valuesAnalisys)
periods = 1
future_forecast = 1
X = base[0:(len(base) - (len(base) % periods))]
X_batches = X.reshape(-1, periods, 1)
y = base[1:(len(base) - (len(base) % periods)) + future_forecast]
y_batches = y.reshape(-1, periods, 1)
X_test = base[-(periods + future_forecast):]
X_test = X_test[:periods]
X_test = X_test.reshape(-1, periods, 1)
y_test = base[-(periods):]
y_test = y_test.reshape(-1, periods, 1)
tf.reset_default_graph()
appetizer = 1
hidden_neurons = 100
exit_neurons = 1
xph = tf.placeholder(tf.float32, [None, periods, appetizer])
yph = tf.placeholder(tf.float32, [None, periods, exit_neurons])
cell = tf.contrib.rnn.BasicRNNCell(num_units = hidden_neurons, activation = tf.nn.relu)
cell = tf.contrib.rnn.OutputProjectionWrapper(cell, output_size = 1)
exit_rnn, _ = tf.nn.dynamic_rnn(cell, xph, dtype = tf.float32)
calculateError = tf.losses.mean_squared_error(labels = yph, predictions = exit_rnn)
otimizador = tf.train.AdamOptimizer(learning_rate = 0.001)
training = otimizador.minimize(calculateError)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch in range(2000):
_, cost = sess.run([training, calculateError], feed_dict = {xph: X_batches, yph: y_batches})
if epoch % 100 == 0:
print("[INFO] Epoch: {} - Level Error: {}".format(epoch,cost))
forecast = sess.run(exit_rnn, feed_dict = {xph: X_test})
y_test.shape
y_test2 = np.ravel(y_test)
final_forecast = np.ravel(forecast)
mae = mean_absolute_error(y_test2, final_forecast)
for (host, forecast, date) in list(zip(servers, final_forecast, datecollect)):
send.postForecastMemory(host, forecast, cost, date)
输出:
A:CPU for cluster because envvar TF_XLA_FLAGS=--tf_xla_cpu_global_jit was not set. If you want XLA:CPU, either set that envvar, or use experimental_jit_scope to enable XLA:CPU. To confirm that XLA is active, pass --vmodule=xla_compilation_cache=1 (as a proper command-line flag, not via TF_XLA_FLAGS) or set the envvar XLA_FLAGS=--xla_hlo_profile.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1356, in _do_call
return fn(*args)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1341, in _run_fn
options, feed_dict, fetch_list, target_list, run_metadata)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1429, in _call_tf_sessionrun
run_metadata)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [1020,1,1] vs. [1019,1,1]
[[{{node gradients/mean_squared_error/SquaredDifference_grad/BroadcastGradientArgs}}]]
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "teste.py", line 61, in <module>
_, custo = sess.run([treinamento, erro], feed_dict = {xph: X_batches, yph: y_batches})
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 950, in run
run_metadata_ptr)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1173, in _run
feed_dict_tensor, options, run_metadata)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1350, in _do_run
run_metadata)
File "/usr/local/lib/python3.7/dist-packages/tensorflow/python/client/session.py", line 1370, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [1020,1,1] vs. [1019,1,1]
[[node gradients/mean_squared_error/SquaredDifference_grad/BroadcastGradientArgs (defined at teste.py:55) ]]
形状:
[INFO] base shape: (1020,)
[INFO] X shape: (1019,)
[INFO] X batches shape: (1, 1019, 1)
[INFO] Y batches shape: (1, 1019, 1)
[INFO] X teste shape: (1, 1019, 1)
[INFO] Y teste shape: (1, 1019, 1)
罪魁祸首似乎是您的 RNN 单元中的固定时间维度。
xph = tf.placeholder(tf.float32, [None, periods, appetizer])
yph = tf.placeholder(tf.float32, [None, periods, exit_neurons])
cell = tf.contrib.rnn.BasicRNNCell(num_units = hidden_neurons, activation = tf.nn.relu)
在这里,您在 xph 和 yph 中都将时间维度指定为句点。所以,如果你有更长或更短的信号,就会出现错误。
我无法推断出模型层的确切尺寸,因为您没有指定输入形状或模型摘要。所以,使用占位符数字。
有两个可能的修复方法。
- 不要使用固定的时间维度 = 周期,而是使用 None。
xph = tf.placeholder(tf.float32, [None, None, appetizer])
yph = tf.placeholder(tf.float32, [None, None, exit_neurons])
但是,缺点是你必须在每批中有相同长度的信号,或者你可以简单地使用批大小 = 1 来训练而不用担心时间长度。
- 使用truncating/padding解决长度问题。只需将您的信号传递给预处理函数即可添加/删除额外的时间点。
import numpy as np
def pre_process(x, fixed_len = 1000): # x.shape -> (100, 1000, 1)
if x.shape[1] >= fixed_len:
return x[:,:fixed_len,:]
else:
z_ph = np.zeros((x.shape[0], fixed_len, x.shape[2]))
z_ph[:,:x.shape[1],:] = x
return z_ph
X_batches = pre_process(X_batches, YOU_CHOOSE_THIS_LENGTH) # based on the length of your data
X_test = pre_process(X_test, YOU_CHOOSE_THIS_LENGTH)