我目前正在尝试在我拥有的图像数据集上运行卷积神经网络。每个图像都是一个numpy数组,尺寸为300,300,1。我使用的是最新版本的Tensorflow和Keras。我的X_Train的尺寸为195850,300,300,1。我的X_Test尺寸为48850,300,300,1。我的Y_Train是195850个元素的向量,使用to_categorical函数将其转换为一个热矢量。
这是我的代码:
from keras.models import Sequential
from keras.layers import LSTM, MaxPooling2D, Convolution2D
from keras.layers import Activation, Dropout, Flatten, Dense
from keras import applications, backend as K
from keras.utils.np_utils import to_categorical
import pickle
import numpy as np
import tensorflow as tf
K.set_image_dim_ordering('tf')
nb_train_samples = 195850
nb_validation_samples = 48850
X_train = pickle.load(open(r'C:\Users\...\Documents\GitHub\ASL_Data\X_Train.pkl', 'rb'))
#X_train = np.moveaxis(np.array(X_train), 0, -1)
Y_train = pickle.load(open(r'C:\Users\...\Documents\GitHub\ASL_Data\Y_Train.pkl', 'rb'))
#Y_train = np.moveaxis(np.array(Y_train), 0, -1)
X_test = pickle.load(open(r'C:\Users\...\Documents\GitHub\ASL_Data\X_Test.pkl', 'rb'))
#X_test = np.moveaxis(np.array(X_test), 0, -1)
Y_test = pickle.load(open(r'C:\Users\\Documents\GitHub\ASL_Data\Y_Test.pkl', 'rb'))
#Y_test = np.moveaxis(np.array(Y_test), 0, -1)
print('X_train shape: ', np.array(X_train).shape)
print('Y_train shape: ', np.array(Y_train).shape)
epochs = 50
batch_size = 50
nb_batches = nb_train_samples // batch_size
input_shape = (300, 300)
print ('before model')
model = Sequential()
model.add(Convolution2D(filters=64, kernel_size=(3,3), data_format="channels_last", input_shape=(300, 300, 1,)))
model.add(Activation('relu'))
model.add(Convolution2D(64, (3, 3), input_shape=(300, 300, 1)))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Convolution2D(128, (3, 3), input_shape=(300, 300, 1)))
model.add(Activation('relu'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(256))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(696))
model.add(Activation('softmax'))
print ('before model compile')
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
print ('after model')
for e in range(0, epochs):
for i in range(0, nb_batches):
start= i * batch_size
end = start + batch_size
channel = np.ones(1)
x_train = np.array(X_train[start:end][:][:])
x_train = x_train.reshape(batch_size, 300, 300, 1)
x_test = np.array(X_test[start:end][:][:])
x_test = x_test.reshape(batch_size, 300, 300, 1)
y_train = np.array(Y_train[start:end][:])
y_test = np.array(Y_test[start:end][:])
print('y_train shape: ', np.array(y_train).shape)
y_train = to_categorical(y_train, num_classes=696)
y_test = to_categorical(y_test, num_classes=696)
print('y_train shape: ', np.array(y_train).shape)
model.train_on_batch(x_train, y_train)
model.test_on_batch(x_test, y_test)
正如你所看到的,我正在使用train_on_batch函数,虽然我不认为这应该是我的错误的起源,它们是:
Traceback (most recent call last):
File "C:\Users\...\Documents\GitHub\ASL_Data\train2.py", line 86, in <module>
model.train_on_batch(x_train, y_train)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\models.py", line 955, in train_on_batch
class_weight=class_weight)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py", line 1762, in train_on_batch
outputs = self.train_function(ins)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\backend\tensorflow_backend.py", line 2270, in __call__
session = get_session()
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\backend\tensorflow_backend.py", line 167, in get_session
_initialize_variables()
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\backend\tensorflow_backend.py", line 341, in _initialize_variables
sess.run(tf.variables_initializer(uninitialized_variables))
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 895, in run
run_metadata_ptr)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 1124, in _run
feed_dict_tensor, options, run_metadata)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 1321, in _do_run
options, run_metadata)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\client\session.py", line 1340, in _do_call
raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Cannot parse tensor from proto: dtype: DT_FLOAT
tensor_shape {
dim {
size: 11063808
}
dim {
size: 256
}
}
float_val: 0
[[Node: training/RMSprop/Const_6 = Const[dtype=DT_FLOAT, value=Tensor<type: float shape: [11063808,256] values: [0 0 0]...>, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
Caused by op 'training/RMSprop/Const_6', defined at:
File "C:\Users\...\Documents\GitHub\ASL_Data\train2.py", line 86, in <module>
model.train_on_batch(x_train, y_train)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\models.py", line 955, in train_on_batch
class_weight=class_weight)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py", line 1761, in train_on_batch
self._make_train_function()
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\engine\training.py", line 960, in _make_train_function
loss=self.total_loss)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\legacy\interfaces.py", line 87, in wrapper
return func(*args, **kwargs)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\optimizers.py", line 226, in get_updates
accumulators = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params]
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\optimizers.py", line 226, in <listcomp>
accumulators = [K.zeros(K.int_shape(p), dtype=K.dtype(p)) for p in params]
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\keras\backend\tensorflow_backend.py", line 625, in zeros
return variable(tf.constant_initializer(0., dtype=tf_dtype)(shape),
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\ops\init_ops.py", line 203, in __call__
verify_shape=verify_shape)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\constant_op.py", line 106, in constant
attrs={"value": tensor_value, "dtype": dtype_value}, name=name).outputs[0]
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 2630, in create_op
original_op=self._default_original_op, op_def=op_def)
File "C:\Users\...\AppData\Local\Programs\Python\Python36\lib\site-packages\tensorflow\python\framework\ops.py", line 1204, in __init__
self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
InvalidArgumentError (see above for traceback): Cannot parse tensor from proto: dtype: DT_FLOAT
tensor_shape {
dim {
size: 11063808
}
dim {
size: 256
}
}
float_val: 0
[[Node: training/RMSprop/Const_6 = Const[dtype=DT_FLOAT, value=Tensor<type: float shape: [11063808,256] values: [0 0 0]...>, _device="/job:localhost/replica:0/task:0/gpu:0"]()]]
我真的被困在这里,所以非常感谢任何帮助,
由于