Не могу обучить модель с массивом - PullRequest
0 голосов
/ 09 октября 2018

Я тренирую следующий автоэнкодер на числах с плавающей точкой.

input_img = Input(shape=(2623,1), name='input')

x = ZeroPadding1D(1)(input_img)
x = Conv1D(32, 3, activation='relu', padding='same', use_bias=False)(input_img)
x = BatchNormalization(axis=-1)(x)
x = MaxPooling1D(2, padding='same')(x)
x = Conv1D(16, 3, activation='relu', padding='same', use_bias=False)(x)
x = BatchNormalization(axis=-1)(x)
x = MaxPooling1D(2, padding='same')(x)
x = Conv1D(16,3, activation='relu', padding='same', use_bias=False)(x)
x = BatchNormalization(axis=-1)(x)
encoded = MaxPooling1D(2, padding='same')(x)


x = Conv1D(16,3, activation='relu', padding='same', use_bias=False)(encoded)
x = BatchNormalization(axis=-1)(x)
x = UpSampling1D(2)(x)
x = Conv1D(16,3, activation='relu', padding='same', use_bias=False)(x)
x = BatchNormalization(axis=-1)(x)
x = UpSampling1D(2)(x)
x = Conv1D(32, 3, activation='relu', padding='same', use_bias=False)(x)  #input_shape=(30, 1))
x = BatchNormalization(axis=-1)(x)  
x = UpSampling1D(2)(x)
x = Cropping1D(cropping=(0, 1))(x) #Crop nothing from input but crop 1 element from the end
decoded = Conv1D(1, 3, activation='sigmoid', padding='same', use_bias=False)(x)  

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='rmsprop', loss='binary_crossentropy')


x = Input(shape=(16, 300), name="input")
h = x
h = Conv1D(filters=300, kernel_size=16,
             activation="relu", padding='same', name='Conv1')(h)
h = MaxPooling1D(pool_size=16, name='Maxpool1')(h)

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

ValueError: не удалось преобразовать строку в число с плавающей точкой:

Это происходит потому, что мои тренировочные данные выглядят следующим образом:

train [0] [1] # одно количество тренировочных данных

array(['0.001758873'], dtype=object)

Что я могу сделать, чтобы избежать "dtype = object" в моих тренировочных данных, или, может быть, мне нужно преобразовать его во что-то еще?Спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Возможно, на этапе предварительной обработки вы можете типизировать массив типов объектов в массив с плавающей запятой, используя что-то вроде:

# if float32 is the desired & appropriate datatype
train = train.astype(numpy.float32)
...