ich bei TensorFlow aus dem Beispiel lerne: MNIST Tutorial - Julia.jlMethodError: keine Methode passende reduce_sum (:: TensorFlow.Tensor {Float32}; reduction_indices = [2])
im Gegensatz zu ihren Tutorial, ich meine eigenen benutzerdefinierten Bilder mit (32 X 32 (RGB)) Format asimular zu cifar-10. Jede Zeile in der CSV ist 3073 Spalten, die letzte ist die Bezeichnung. Und ich habe 300 Zeilen, von denen ich Array Slicing verwendet habe, um die ersten 240 Zeilen für das Training und die restlichen für Tests auszuwählen. also in einer nut shell Ich habe 4 Arrays: images_train = 240 X 3072 labels_train = 240 X 1 images_test = 60 X 3072 labels_test = 60 X 1 Unten ist der Fehler: THE ERROR
der Code:
using TensorFlow
using Distributions
include("loader.jl")
session = Session(Graph())
function weight_variable(shape)
initial = map(Float32, rand(Normal(0, .001), shape...))
return Variable(initial)
end
function bias_variable(shape)
initial = fill(Float32(.1), shape...)
return Variable(initial)
end
function conv2d(x, W)
nn.conv2d(x, W, [1, 1, 1, 1], "SAME")
end
function max_pool_2x2(x)
nn.max_pool(x, [1, 2, 2, 1], [1, 2, 2, 1], "SAME")
end
x = placeholder(Float32)
y_ = placeholder(Float32)
W_conv1 = weight_variable([5, 5, 3, 32])
b_conv1 = bias_variable([32])
x_image = reshape(x, [-1, 32, 32, 3])
h_conv1 = nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
W_conv2 = weight_variable([5, 5, 32, 64])
b_conv2 = bias_variable([64])
h_conv2 = nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)
h_pool2 = max_pool_2x2(h_conv2)
W_fc1 = weight_variable([7*7*64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = reshape(h_pool2, [-1, 7*7*64])
h_fc1 = nn.relu(h_pool2_flat * W_fc1 + b_fc1)
keep_prob = placeholder(Float32)
h_fc1_drop = nn.dropout(h_fc1, keep_prob)
W_fc2 = weight_variable([1024, 9])
b_fc2 = bias_variable([9])
y_conv = nn.softmax(h_fc1_drop * W_fc2 + b_fc2)
cross_entropy = reduce_mean(-reduce_sum((y_ .* log(y_conv)), reduction_indices=[2]))
train_step = train.minimize(train.AdamOptimizer(1e-4), cross_entropy)
correct_prediction = indmax(y_conv, 2) .== indmax(y_, 2)
accuracy = reduce_mean(cast(correct_prediction, Float32))
run(session, initialize_all_variables())
for i in 1:40
images_train,labels_train = next_batch(16) # randomly generate batches from training dataset
if i%4 == 1
train_accuracy = run(session, accuracy, Dict(x=>images_train, y_=>labels_train, keep_prob=>1.0))
info("step $i, training accuracy $train_accuracy")
end
run(session, train_step, Dict(x=>images_train, y_=>labels_train, keep_prob=>.5))
end
images_test, labels_test = load_test_set() # 60 X 3072, 60 X 1 Arrays
test_accuracy = run(session, accuracy, Dict(x=>images_test, y_=>labels_test, keep_prob=>1.0))
info("test accuracy $test_accuracy")
Danke
Ihre Antwort war sehr hilfreich und begann zu laufen und fragt Umformung: INFO: Schritt 1 Training Genauigkeit 0.0 Tensorflow Fehler: Status: Eingang neu zu gestalten ist ein Tensor mit 65536 Werten, aber die angeforderte Form erfordert eine Mehrfach von 3136 \t [[Knoten: Reshape_2 = Umformen [T = DT_FLOAT, Tshape = DT_INT32, _class = [], _device = "/ job: localhost/replik: 0/task: 0/cpu: 0"] (MaxPool_2, Const_8)]]] – spg
@spg Das liegt daran, dass Sie die Größe des Eingabebildes geändert haben und jetzt in den Größen nicht übereinstimmen. Ändere einfach W_fc1 zu W_fc1 = weight_variable ([8 * 8 * 64, 1024]) und h_pool2_flat zu h_pool2_flat = reshape (h_pool2, [-1, 8 * 8 * 64]) – asakryukin
es hat sehr geholfen. Alles was ich jetzt machen werde ist Training, obwohl für die angegebenen Iterationen die Genauigkeit immer war. Vielen Dank^n – spg