Как создать метку изображения для контролируемого обучения в Tensorflow? - PullRequest
0 голосов
/ 10 июля 2019

Я тренирую нейронную сеть.Это двоичный классификатор.Классифицирует простые и лесные изображения.Я преобразовал все 4K изображения в 124 × 93 × 3.Все было ок.Но тензор потока не распознает графические метки.Модель тренируется, потери уменьшаются, но я получаю ту же точность.

data_y=[]
for x in range(len(data_x)):
  data_y.append(np.array(random.randint(0,1)))

data_y=np.array(data_y).astype(np.float32)

Этот блок кода создает случайные метки в формате np.float32.Какой формат распознает тензор потока?

Вот вам и весь код.

from google.colab import drive
drive.mount('/content/gdrive')
%cd content/gdrive/My Drive/Image Dataset
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import cv2
import random

data_x=np.load("/content/gdrive/My Drive/Image Dataset/foo0.npy")
tmp=[]
for i_tmp in data_x:
  gray = cv2.resize(i_tmp,(124, 93))
  tmp.append(gray)

del data_x
data_x=np.array(tmp).astype(np.float32)
del tmp
data_y=[]
for x in range(len(data_x)):
  data_y.append(np.array(random.randint(0,1)))

data_y=np.array(data_y).astype(np.float32)

X=tf.placeholder(tf.float32,[None,93, 124, 3])
Y=tf.placeholder(tf.float32)

w1=tf.Variable(tf.zeros([34596,1000]))
b1=tf.Variable(tf.zeros(1000))
w2=tf.Variable(tf.zeros([1000,1]))
b2=tf.Variable(tf.zeros([1]))

y1=tf.nn.tanh(tf.linalg.matmul(tf.reshape(X,(-1,34596)),w1)+b1)
y_pred=tf.nn.sigmoid(tf.linalg.matmul(y1,w2)+b2)

xent=-tf.reduce_sum(tf.math.square(Y-y_pred))

correct_pred=tf.equal(Y,tf.round(y_pred))
accuracy=tf.reduce_mean(tf.cast(correct_pred,tf.float32))

optimizer=tf.train.AdamOptimizer(1e-3).minimize(xent)

with tf.Session() as sess:
  sess.run(tf.global_variables_initializer())
  for i in range(10000):
    sess.run(optimizer,feed_dict={X:data_x,Y:data_y})
    if i%10==0:
      acc,loss=sess.run([accuracy,xent],feed_dict={X:data_x,Y:data_y})
      print("Iteration",i,"Accuracy="+str(acc),"Loss="+str(loss))
...