我正在尝试实现对图像进行简单二进制分类的感知器。但是我在运行时遇到以下错误:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [2,1075] vs. [1075,2]
但是一定可以。所有形状都符合我的观点。这是我的全部代码:
import tensorflow.compat.v1 as tf
from sklearn.preprocessing import MinmaxScaler
from PIL import Image,ImageDraw
from os import walk
#pixToArray convert image to 1D array
def pixToArray(pix,w,h):
rez = [0] * h * w
for i in range(h):
for j in range(w):
p=pix[j,i]
if type(p)==int:
rez[i * w + j] = p
else:
a = p[0]
b = p[1]
c = p[2]
rez[i * w + j] = (a + b + c) / 3
return rez;
print("programm start")
images = []
for (dirpath,dirnames,filenames) in walk("0/"):
images.extend(filenames)
break
image = Image.open("0/" + images[0])
n = image.size[0] * image.size[1]
pixArray = pixToArray(image.load(),image.size[0],image.size[1])
trainX = []
trainY = []
for i in range(len(images)):
image = Image.open("0/" + images[0])
trainX.append(pixToArray(image.load(),image.size[1]))
trainY.append([1,0])
images = []
for (dirpath,filenames) in walk("3/"):
images.extend(filenames)
break
for i in range(len(images)):
image = Image.open("3/" + images[0])
trainX.append(pixToArray(image.load(),image.size[1]))
trainY.append([0,1])
print("data reading end")
scaler = MinmaxScaler(feature_range=(-1,1))
scaler.fit(trainX)
trainX = scaler.transform(trainX)
n_stocks = n
n_neurons_1 = 1024
n_neurons_2 = 512
n_neurons_3 = 256
n_neurons_4 = 128
n_target = 2
tf.disable_eager_execution()
net = tf.InteractiveSession()
X = tf.placeholder(dtype=tf.float32,shape=[None,n_stocks])
Y = tf.placeholder(dtype=tf.float32,n_target])
sigma = 1
weight_initializer = tf.variance_scaling_initializer(mode="fan_avg",distribution="uniform",scale=sigma)
bias_initializer = tf.zeros_initializer()
W_hidden_1 = tf.Variable(weight_initializer([n_stocks,n_neurons_1]))
bias_hidden_1 = tf.Variable(bias_initializer([n_neurons_1]))
W_hidden_2 = tf.Variable(weight_initializer([n_neurons_1,n_neurons_2]))
bias_hidden_2 = tf.Variable(bias_initializer([n_neurons_2]))
W_hidden_3 = tf.Variable(weight_initializer([n_neurons_2,n_neurons_3]))
bias_hidden_3 = tf.Variable(bias_initializer([n_neurons_3]))
W_hidden_4 = tf.Variable(weight_initializer([n_neurons_3,n_neurons_4]))
bias_hidden_4 = tf.Variable(bias_initializer([n_neurons_4]))
W_out = tf.Variable(weight_initializer([n_neurons_4,n_target]))
bias_out = tf.Variable(bias_initializer([n_target]))
hidden_1 = tf.sigmoid(tf.add(tf.matmul(X,W_hidden_1),bias_hidden_1))
hidden_2 = tf.sigmoid(tf.add(tf.matmul(hidden_1,W_hidden_2),bias_hidden_2))
hidden_3 = tf.sigmoid(tf.add(tf.matmul(hidden_2,W_hidden_3),bias_hidden_3))
hidden_4 = tf.sigmoid(tf.add(tf.matmul(hidden_3,W_hidden_4),bias_hidden_4))
out = tf.transpose(tf.add(tf.matmul(hidden_4,W_out),bias_out))
mse = tf.reduce_mean(tf.squared_difference(out,Y))
opt = tf.train.AdamOptimizer().minimize(mse)
net.run(tf.global_variables_initializer())
print("neural network had configurated")
testX = []
image = Image.open("11.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
image = Image.open("12.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
image = Image.open("13.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
image = Image.open("14.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
image = Image.open("21.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
image = Image.open("22.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
image = Image.open("23.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
image = Image.open("24.jpg")
testX.append(pixToArray(image.load(),image.size[1]))
testX = scaler.transform(testX)
batch_size = 64
epochs = 25
for e in range(epochs):
print("training epochs ",e," started")
net.run(opt,feed_dict={X: trainX,Y: trainY})
pred = net.run(out,feed_dict={X: testX})
print('pred ',pred)
print('programm finish');
请帮助。在这里,您可以找到包含培训和测试数据(279kb)的我的项目文件夹: https://drive.google.com/file/d/1hkpGkhmXyoIx1PxAFH7CkdxjHFVOORjK/view?usp=sharing