【发布时间】:2020-09-15 13:46:44
【问题描述】:
我目前正在开始使用 TensorFlow 2.0,我刚刚阅读了有关估算器类的信息。
我创建了一个简单的 XOR 生成器,它为我提供了 2D 坐标(numpy 数组)和一个标签。
数据正确标准化,一切正常,直到第 40 行,此时我收到以下错误:
ValueError: 无法用 2 个元素重塑张量以形成 [2,2] (4 元素)对于'{{节点 dnn/input_from_feature_columns/input_layer/X_1/Reshape}} = 重塑[T=DT_FLOAT, Tshape=DT_INT32](dnn/input_from_feature_columns/input_layer/X_1/ExpandDims, dnn/input_from_feature_columns/input_layer/X_1/Reshape/shape)' 与 输入形状:[2,1]、[2],输入张量计算为部分 形状:输入[1] = [2,2]。
这对我来说没有意义,因为我检查了我的输入形状,它确实是指定的 (2,) 并且标签是一个标量张量:
({'X': <tf.Tensor: shape=(2,), dtype=float64, numpy=array([ 0.2885114 , -0.77485602])>}, <tf.Tensor: shape=(), dtype=float64, numpy=0.0>)
代码如下:
import tensorflow as tf
import XorGenerator as XOR
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import StandardScaler as SC
@tf.function
def trainingData(X, y, batchSize=1):
y = tf.cast(y, tf.uint8)
y = tf.one_hot(y, depth=2, on_value=1, off_value=0)
dataset = tf.data.Dataset.from_tensor_slices(({'data' : X}, y))
#dataset.batch(batchSize)
return dataset.repeat()
def main():
X, y = XOR.XOR(400) # X: float 2D-coordinates, y: class labels (-1 and 1)
y = np.where(y == -1, np.zeros(shape=y.shape), y) # labels from (-1 and 1) to (0 and 1)
sc = SC(with_mean=True, with_std=True)
X = sc.fit_transform(X)
BATCH_SIZE = 1
EPOCHS = 10
N_SAMPLES = 400
inputFeatureColumns = [tf.feature_column.numeric_column(key='data', shape=(2))]
estimator = tf.estimator.DNNClassifier(hidden_units=[32, 16], feature_columns=inputFeatureColumns, n_classes=2,
activation_fn=tf.nn.sigmoid, optimizer='SGD')
estimator.train(input_fn=lambda: trainingData(X, y, BATCH_SIZE), steps=EPOCHS * N_SAMPLES / BATCH_SIZE)
if __name__ == "__main__":
main()
异或生成器:
import numpy as np
import matplotlib.pyplot as plt
def sign(x):
return 1 if x > 0 else -1
def XOR(nSamples):
resX = [np.random.random(size=2) * 2 - 1 for _ in range(nSamples)]
resY = [np.random.random(size=2) * 2 - 1 for _ in range(nSamples)]
for x in range(nSamples):
resY[x] = sign(resX[x][0] * resX[x][1])
return np.array(resX), np.array(resY)
【问题讨论】:
标签: python tensorflow machine-learning