Ошибка типа: неподдерживаемый тип (ы) операндов для: - PullRequest
0 голосов
/ 05 февраля 2020

Я следую инструкциям https://www.pyimagesearch.com/2018/09/10/keras-tutorial-how-to-get-started-with-keras-deep-learning-and-python/

Я использую Tensorflow2.0 на python 3.7

Когда код достигает точки, где определен входной слой, используя

model.add(Conv2D(32, (3, 3), padding="same",input_shape=inputShape))

Я получаю следующую ошибку:

      TypeError: unsupported operand type(s) for -: 'tensorflow.python.framework.ops.EagerTensor' and 'tensorflow.python.framework.ops.EagerTensor' With the following traceback

      File "<ipython-input-103-82ea2474a164>", line 1, in <module>
        model.add(Conv2D(32, (3, 3), padding="same",input_shape=inputShape))

      File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\sequential.py", line 166, in add
        layer(x)

      File "C:\ProgramData\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py", line 75, in symbolic_fn_wrapper
        return func(*args, **kwargs)

      File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\base_layer.py", line 463, in __call__
        self.build(unpack_singleton(input_shapes))

      File "C:\ProgramData\Anaconda3\lib\site-packages\keras\layers\convolutional.py", line 141, in build
        constraint=self.kernel_constraint)

      File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\base_layer.py", line 279, in add_weight
        weight = K.variable(initializer(shape, dtype=dtype),

      File "C:\ProgramData\Anaconda3\lib\site-packages\keras\initializers.py", line 227, in __call__
        dtype=dtype, seed=self.seed)

      File "C:\ProgramData\Anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py", line 4357, in random_uniform
        shape, minval=minval, maxval=maxval, dtype=dtype, seed=seed)

      File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow_core\python\keras\backend.py", line 5598, in random_uniform
        shape, minval=minval, maxval=maxval, dtype=dtype, seed=seed)

      File "C:\ProgramData\Anaconda3\lib\site-packages\tensorflow_core\python\ops\random_ops.py", line 246, in random_uniform
        result = math_ops.add(rnd * (maxval - minval), minval, name=name)

    TypeError: unsupported operand type(s) for -: 'tensorflow.python.framework.ops.EagerTensor' and 'tensorflow.python.framework.ops.EagerTensor'

I проверили, что переданные входные размеры имеют тип данных int. Не уверен, как исправить ошибку

Включая код вызова. Он считывает изображения и изменяет их размер до 64 * 64

# USAGE
# python train_vgg.py --dataset animals --model output/smallvggnet.model -- 
label-bin output/smallvggnet_lb.pickle --plot output/smallvggnet_plot.png

# set the matplotlib backend so figures can be saved in the background
import matplotlib
matplotlib.use("Agg")

# import the necessary packages
from pyimagesearch.smallvggnet import SmallVGGNet
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from keras.preprocessing.image import ImageDataGenerator
from keras.optimizers import SGD
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import random
import pickle
import cv2 #pip install opencv-python
import os

args = {'dataset': 'E:/keras-tutorial/animals', 'model':'E:/keras-tutorial/output', 'label_bin':'E:/keras-tutorial/output' , 'plot':'E:/keras-tutorial/output'} 


# initialize the data and labels
print("[INFO] loading images...")
data = []
labels = []

# grab the image paths and randomly shuffle them
imagePaths = sorted(list(paths.list_images(args["dataset"])))
random.seed(42)
random.shuffle(imagePaths)

# loop over the input images
for imagePath in imagePaths:
    # load the image, resize it to 64x64 pixels (the required input
    # spatial dimensions of SmallVGGNet), and store the image in the
    # data list
    image = cv2.imread(imagePath)
    image = cv2.resize(image, (64, 64))
    data.append(image)

    # extract the class label from the image path and update the
    # labels list
    label = imagePath.split(os.path.sep)[-2]
    labels.append(label)

# scale the raw pixel intensities to the range [0, 1]
data = np.array(data, dtype="float") / 255.0
labels = np.array(labels)

# partition the data into training and testing splits using 75% of
# the data for training and the remaining 25% for testing
(trainX, testX, trainY, testY) = train_test_split(data,labels, test_size=0.25, random_state=42)

# convert the labels from integers to vectors (for 2-class, binary     classification you should use Keras' to_categorical function
# as the scikit-learn's LabelBinarizer will not return a vector)
lb = LabelBinarizer()
trainY = lb.fit_transform(trainY)
testY = lb.transform(testY)

# construct the image generator for data augmentation
aug = ImageDataGenerator(rotation_range=30, width_shift_range=0.1,
height_shift_range=0.1, shear_range=0.2, zoom_range=0.2,
horizontal_flip=True, fill_mode="nearest")

# initialize our VGG-like Convolutional Neural Network
model = SmallVGGNet.build(width=64, height=64, depth=3, classes=len(lb.classes_))

Код класса SmallVG GNet:

# import the necessary packages
from keras.models import Sequential
from keras.layers.normalization import BatchNormalization
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.layers.core import Activation
from keras.layers.core import Flatten
from keras.layers.core import Dropout
from keras.layers.core import Dense
from keras import backend as K

class SmallVGGNet:
    @staticmethod
    def build(width, height, depth, classes):
        # initialize the model along with the input shape to be
        # "channels last" and the channels dimension itself
        model = Sequential()
        inputShape = (height, width, depth)
        chanDim = -1

        # if we are using "channels first", update the input shape
        # and channels dimension
        if K.image_data_format() == "channels_first":
            inputShape = (depth, height, width)
            chanDim = 1

        # CONV => RELU => POOL layer set
        model.add(Conv2D(32, (3, 3), padding="same",input_shape=(inputShape))

В последней строке выдается ошибка

1 Ответ

0 голосов
/ 10 февраля 2020

Наконец-то исправили проблему, понизив версию cuda с 10.1 до cuda 10.0. Сейчас я использую следующие версии: Драйвер графического процессора NVIDIA 426.26, инструментарий CUDA: 10.0, CuDNN версия 7.6.5 и Tensorflow 2.0.0

и соответствующим образом изменил все операторы импорта с keras.layers ... на tenorflow.keras.layers ...

Наконец проверил доступность графического процессора, используя:

import tenorflow как tf tf. test.is_gpu_available (cuda_only = False, min_cuda_compute_capability = None)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...