Нельзя группировать тензоры с различными формами в компоненте 0. Первый элемент имел форму [256,2], а элемент 36 имел форму [32,2] - PullRequest
0 голосов
/ 04 ноября 2019

Я работаю с модным набором данных MNIST и хочу создать искусственную нейронную сеть, используя собственные слои, созданные мной:

Вот мой этап предварительной обработки:

#ANN with fashion mnist data_set
import tensorflow as tf
import numpy as np
from tensorflow.keras.datasets import fashion_mnist
from tensorflow.keras.layers import Layer
from tensorflow.keras import Model

#Loading dataset and preprocessing:
(X_train,Y_train),(X_test,Y_test) = fashion_mnist.load_data()

unique_labels = set(Y_train)

X_train = X_train/255 #because max value of pixel is 255
X_test = X_test/255 #because max value of pixel is 255

X_train = X_train.reshape(-1,28*28)#flatten image from 28*28 to N*(28*28), second dimension - all the pixels of image
X_test = X_test.reshape(-1,28*28)

Y_train = Y_train.reshape(Y_train.shape[0],1)
Y_test = Y_test.reshape(Y_test.shape[0],1)

dataset_train = tf.data.Dataset.from_tensor_slices((X_train, Y_train))
dataset_train = dataset.shuffle(buffer_size=1024).batch(64)

dataset_test = tf.data.Dataset.from_tensor_slices((X_test, Y_test))
dataset_test = dataset.shuffle(buffer_size=1024).batch(64)

Вот выМожно видеть, что я предварительно обработал данные, чтобы они имели двухмерную форму (что лучше подходит для ANN). Я знаю, что мог бы использовать CNN для следующей задачи, но моя цель - потренироваться с ANN.

И в конце я получаю следующую ошибку:

InvalidArgumentError                      Traceback (most recent call last)
<ipython-input-104-24b493b0dcc5> in <module>()
    102 
    103 for epoch in range(EPOCHS):
--> 104   for X,y in dataset_train:
    105     training(X,y)
    106 

4 frames
/usr/local/lib/python3.6/dist-packages/six.py in raise_from(value, from_value)

InvalidArgumentError: Cannot batch tensors with different shapes in component 0. First element had shape [256,2] and element 36 had shape [32,2]. [Op:IteratorGetNextSync]

Но еслиЯ не использую batch(64) все отлично работает отлично. Как я могу решить эту проблему?

1 Ответ

1 голос
/ 05 ноября 2019

Возможно, вы используете ранее кэшированные tf.Dataset. Потому что у вас есть train_dataset и test_dataset, а не dataset. Я протестировал следующий код, и он вернет партию размером 64.

#ANN with fashion mnist data_set
import tensorflow as tf
import numpy as np
from tensorflow.keras.datasets import fashion_mnist
from tensorflow.keras.layers import Layer
from tensorflow.keras import Model

#Loading dataset and preprocessing:
(X_train,Y_train),(X_test,Y_test) = fashion_mnist.load_data()

unique_labels = set(Y_train)

X_train = X_train/255 #because max value of pixel is 255
X_test = X_test/255 #because max value of pixel is 255

X_train = X_train.reshape(-1,28*28)#flatten image from 28*28 to N*(28*28), second dimension - all the pixels of image
X_test = X_test.reshape(-1,28*28)

Y_train = Y_train.reshape(Y_train.shape[0],1)
Y_test = Y_test.reshape(Y_test.shape[0],1)

dataset_train = tf.data.Dataset.from_tensor_slices((X_train, Y_train))
dataset_train = dataset_train.shuffle(buffer_size=1024).batch(64)

dataset_test = tf.data.Dataset.from_tensor_slices((X_test, Y_test))
dataset_test = dataset_test.shuffle(buffer_size=1024).batch(64)

# Checking if we are actually getting a batch of data of size 64

# Creating an iterator
iterator = dataset_test.make_one_shot_iterator()

# Getting one batch of data
bi,bl = iterator.get_next()

with tf.Session() as sess:
  e_bi = sess.run(bi)
  print(e_bi.shape)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...