Tensorflow 如何使用“稀疏”softmax\u cross\u entropy\u with\u logits`:不获取不兼容的形状错误
我想使用 使用julia TensorFlow包装器 操作在中定义。 基本上,据我所知,第一个参数应该是logits,它通常会被提供给softmax,以使它们成为类别概率(~1hot输出)。 第二个标签应该是正确的标签ID 我已经从中调整了示例代码 见下文:Tensorflow 如何使用“稀疏”softmax\u cross\u entropy\u with\u logits`:不获取不兼容的形状错误,tensorflow,julia,Tensorflow,Julia,我想使用 使用julia TensorFlow包装器 操作在中定义。 基本上,据我所知,第一个参数应该是logits,它通常会被提供给softmax,以使它们成为类别概率(~1hot输出)。 第二个标签应该是正确的标签ID 我已经从中调整了示例代码 见下文: using Distributions using TensorFlow # Generate some synthetic data x = randn(100, 50) w = randn(50, 10) y_prob = exp(x
using Distributions
using TensorFlow
# Generate some synthetic data
x = randn(100, 50)
w = randn(50, 10)
y_prob = exp(x*w)
y_prob ./= sum(y_prob,2)
function draw(probs)
y = zeros(size(probs))
for i in 1:size(probs, 1)
idx = rand(Categorical(probs[i, :]))
y[i, idx] = 1
end
return y
end
y = draw(y_prob)
# Build the model
sess = Session(Graph())
X = placeholder(Float64)
Y_obs = placeholder(Float64)
Y_obs_lbl = indmax(Y_obs, 2)
variable_scope("logisitic_model", initializer=Normal(0, .001)) do
global W = get_variable("weights", [50, 10], Float64)
global B = get_variable("bias", [10], Float64)
end
L = X*W + B
Y=nn.softmax(L)
#costs = log(Y).*Y_obs #Dense (Orginal) way
costs = nn.sparse_softmax_cross_entropy_with_logits(L, Y_obs_lbl+1) #sparse way
Loss = -reduce_sum(costs)
optimizer = train.AdamOptimizer()
minimize_op = train.minimize(optimizer, Loss)
saver = train.Saver()
# Run training
run(sess, initialize_all_variables())
cur_loss, _ = run(sess, [Loss, minimize_op], Dict(X=>x, Y_obs=>y))
然而,当我运行它时,我得到一个错误:
Tensorflow error: Status: Incompatible shapes: [1,100] vs. [100,10]
[[Node: gradients/SparseSoftmaxCrossEntropyWithLogits_10_grad/mul = Mul[T=DT_DOUBLE, _class=[], _device="/job:localhost/replica:0/task:0/cpu:0"](gradients/SparseSoftmaxCrossEntropyWithLogits_10_grad/ExpandDims, SparseSoftmaxCrossEntropyWithLogits_10:1)]]
in check_status(::TensorFlow.Status) at /home/ubuntu/.julia/v0.5/TensorFlow/src/core.jl:101
in run(::TensorFlow.Session, ::Array{TensorFlow.Port,1}, ::Array{Any,1}, ::Array{TensorFlow.Port,1}, ::Array{Ptr{Void},1}) at /home/ubuntu/.julia/v0.5/TensorFlow/src/run.jl:96
in run(::TensorFlow.Session, ::Array{TensorFlow.Tensor,1}, ::Dict{TensorFlow.Tensor,Array{Float64,2}}) at /home/ubuntu/.julia/v0.5/TensorFlow/src/run.jl:143
这只有在我尝试训练它时才会发生。
如果我没有包括优化功能/输出,那么它可以正常工作。
所以我做了一些事情,搞砸了梯度数学。我提出了一个问题:好吧,这是一个bug。它正在被修复。