python


3、大数据情形下的拼接

<pre><code class="language-python">import numpy as np import cv2 import os import pandas as pd from sklearn.model_selection import train_test_split from tensorflow.python.keras import backend as K from tensorflow import keras from tensorflow.python.keras.layers import Conv2D, MaxPooling2D from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dense, Dropout, Flatten from tensorflow.python.keras.optimizers import RMSprop</code></pre> <pre><code class="language-python">images = [] if(os.path.exists("label.txt")): os.remove("label.txt") else: print("nothing") # 照片目录 file_dir="D:\\work\\jupyterNotebook\\baidu_dianshi\\data\\multi_test_data" # 读入标签数据 df = pd.DataFrame(pd.read_csv('./data/multi_test_data_lable.csv',header=0)) def read_imgs_labels(): # 获取lables 和img_name lables = df['lables'] img_name = df['img_name'] # 遍历文件夹内所有图片,读取图片存到img,遍历到名字,在img_name中查找 # 查找到后,获取当前行数,取出对应的label,并替换为1-6的整数存入label_name list_files = os.listdir(file_dir) for j in range(1500): file = list_files[j] img_path=file_dir+'\\'+file #每个图片的地址 #for file in os.listdir(file_dir): # print(file) #img_path=file_dir+'\\'+file #每个图片的地址 # img=Image.open(img_path) i = 0 for file_name in img_name: if file_name == file: label = lables[i] # print(label) if label == 'MOUNTAIN': label_name = 1 elif label == 'OCEAN': label_name = 2 elif label == 'DESERT': #沙漠 label_name = 3 elif label == 'LAKE': label_name = 4 elif label == 'FARMLAND': #农田 label_name = 5 elif label == 'CITY': label_name = 6 # 把标签存入txt文件 label = label_name # print (label)#ord():查看字符asc码 doc= open('label.txt','a') print(label,file=doc) break else: i = i+1 images.append(cv2.imread(img_path)) doc.close() return images</code></pre> <pre><code class="language-python">images = [] images = read_imgs_labels()</code></pre> <p><code>X_img = np.array(images)</code>进行这个操作时,发现当images大于1600后会出现报错<code>ValueError: could not broadcast input array from shape (256,256) into shape (256)</code>,目前猜测可能256*256的分辨率过大,所以导入数据时,只选择了1500个样本,需要优化</p> <pre><code class="language-python">X_img = np.array(images)</code></pre> <pre><code class="language-python">Y_label = np.loadtxt('label.txt')</code></pre> <pre><code class="language-python">print(X_img.shape) print(Y_label.shape)</code></pre> <pre><code>(1500, 256, 256, 3) (1500,)</code></pre> <pre><code class="language-python">x_train, x_test, y_train, y_test = train_test_split(X_img, Y_label, test_size = 0.2, random_state= 30) print (x_train.shape) print (x_test.shape) print (y_train.shape) print (y_test.shape)</code></pre> <pre><code>(1200, 256, 256, 3) (300, 256, 256, 3) (1200,) (300,)</code></pre> <pre><code class="language-python">batch_size = 5 num_classes = 6 epochs = 3 # input image dimensions img_rows, img_cols = 256, 256 if K.image_data_format() == 'channels_first': x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols) x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols) input_shape = (1, img_rows, img_cols) else: x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 3) x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 3) input_shape = (img_rows, img_cols, 3)</code></pre> <pre><code class="language-python">x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 print('x_train shape:', x_train.shape) print(x_train.shape[0], 'train samples') print(x_test.shape[0], 'test samples')</code></pre> <pre><code>x_train shape: (1200, 256, 256, 3) 1200 train samples 300 test samples</code></pre> <pre><code class="language-python"># convert class vectors to binary class matrices # 由于之前分六类写为了1-6 这里需要减1 变为 0-5 y_train = keras.utils.to_categorical(y_train-1, num_classes) y_test = keras.utils.to_categorical(y_test-1, num_classes) print(y_test[0])</code></pre> <pre><code>[0. 0. 1. 0. 0. 0.]</code></pre> <pre><code class="language-python">model = Sequential() model.add(Conv2D(8, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(Conv2D(16, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(32, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(num_classes, activation='softmax'))</code></pre> <pre><code class="language-python">model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy'])</code></pre> <pre><code class="language-python">history = model.fit(x_train, y_train, batch_size=5, epochs=epochs, verbose=1, validation_data=(x_test, y_test))</code></pre> <pre><code>Train on 1200 samples, validate on 300 samples Epoch 1/3 1200/1200 [==============================] - 57s 48ms/step - loss: 1.6809 - acc: 0.4583 - val_loss: 1.2663 - val_acc: 0.6933 Epoch 2/3 1200/1200 [==============================] - 51s 42ms/step - loss: 1.2479 - acc: 0.6017 - val_loss: 0.9451 - val_acc: 0.7367 Epoch 3/3 1200/1200 [==============================] - 51s 42ms/step - loss: 1.1144 - acc: 0.6375 - val_loss: 1.1550 - val_acc: 0.6400</code></pre> <pre><code class="language-python">model.save('./model.hdf5')</code></pre> <pre><code class="language-python">model.summary()</code></pre> <pre><code>_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= conv2d (Conv2D) (None, 254, 254, 8) 224 _________________________________________________________________ conv2d_1 (Conv2D) (None, 252, 252, 16) 1168 _________________________________________________________________ max_pooling2d (MaxPooling2D) (None, 126, 126, 16) 0 _________________________________________________________________ dropout (Dropout) (None, 126, 126, 16) 0 _________________________________________________________________ flatten (Flatten) (None, 254016) 0 _________________________________________________________________ dense (Dense) (None, 32) 8128544 _________________________________________________________________ dropout_1 (Dropout) (None, 32) 0 _________________________________________________________________ dense_1 (Dense) (None, 6) 198 ================================================================= Total params: 8,130,134 Trainable params: 8,130,134 Non-trainable params: 0 _________________________________________________________________</code></pre> <pre><code class="language-python">import matplotlib.pyplot as plt image_arr = np.expand_dims(x_train[1], axis=0) layer_1 = K.function([model.layers[0].input], [model.layers[0].output]) f1 = layer_1([image_arr])[0] for _ in range(8): show_img = f1[:, :, :, _] show_img.shape = [254, 254] #plt.subplot(4, 8, _ + 1) plt.subplot(1, 8, _ + 1) plt.imshow(show_img, cmap='gray') plt.axis('off') plt.show()</code></pre> <p><img src="https://www.showdoc.cc/server/api/common/visitfile/sign/7092bb2f073f22f4987d873209884cad?showdoc=.jpg" alt="" /></p> <pre><code class="language-python">from tensorflow.python.keras.models import load_model model = load_model('./model.hdf5') model.fit(x_train, y_train, batch_size=5, epochs=10, verbose=1, validation_data=(x_test, y_test))</code></pre> <pre><code>Train on 1200 samples, validate on 300 samples Epoch 1/10 1200/1200 [==============================] - 51s 42ms/step - loss: 0.9998 - acc: 0.6850 - val_loss: 0.8985 - val_acc: 0.7267 Epoch 2/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.8694 - acc: 0.7142 - val_loss: 0.7849 - val_acc: 0.7733 Epoch 3/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.8316 - acc: 0.7258 - val_loss: 0.7806 - val_acc: 0.7767 Epoch 4/10 1200/1200 [==============================] - 51s 43ms/step - loss: 0.7685 - acc: 0.7542 - val_loss: 1.0886 - val_acc: 0.6467 Epoch 5/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.6485 - acc: 0.7958 - val_loss: 0.8501 - val_acc: 0.7467 Epoch 6/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.5867 - acc: 0.8108 - val_loss: 0.8261 - val_acc: 0.7700 Epoch 7/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.5793 - acc: 0.8267 - val_loss: 0.8209 - val_acc: 0.7533 Epoch 8/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.4912 - acc: 0.8483 - val_loss: 1.0650 - val_acc: 0.7833 Epoch 9/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.4236 - acc: 0.8617 - val_loss: 0.8549 - val_acc: 0.7833 Epoch 10/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.3854 - acc: 0.8642 - val_loss: 1.5621 - val_acc: 0.6400 &lt;tensorflow.python.keras.callbacks.History at 0x253579c9e48&gt;</code></pre> <pre><code class="language-python"># 评估模型 loss,accuracy = model.evaluate(x_test,y_test) print('\ntest loss',loss) print('accuracy',accuracy)</code></pre> <pre><code>300/300 [==============================] - 3s 10ms/step test loss 1.562104508082072 accuracy 0.6400000007947286</code></pre> <pre><code class="language-python">model.save('./model.hdf5')</code></pre> <pre><code class="language-python">model = load_model('./model.hdf5') model.fit(x_train, y_train, batch_size=5, epochs=10, verbose=1, validation_data=(x_test, y_test))</code></pre> <pre><code>Train on 1200 samples, validate on 300 samples Epoch 1/10 1200/1200 [==============================] - 51s 42ms/step - loss: 0.4052 - acc: 0.8875 - val_loss: 1.1719 - val_acc: 0.7767 Epoch 2/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.3325 - acc: 0.8933 - val_loss: 0.8946 - val_acc: 0.7833 Epoch 3/10 1200/1200 [==============================] - 49s 41ms/step - loss: 0.2776 - acc: 0.9017 - val_loss: 1.2032 - val_acc: 0.7733 Epoch 4/10 1200/1200 [==============================] - 49s 41ms/step - loss: 0.2930 - acc: 0.9008 - val_loss: 1.1097 - val_acc: 0.7567 Epoch 5/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.2907 - acc: 0.9042 - val_loss: 1.3922 - val_acc: 0.7533 Epoch 6/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.2656 - acc: 0.9200 - val_loss: 1.8665 - val_acc: 0.7133 Epoch 7/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.2531 - acc: 0.9208 - val_loss: 1.2537 - val_acc: 0.7400 Epoch 8/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.2445 - acc: 0.9117 - val_loss: 1.5419 - val_acc: 0.7433 Epoch 9/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.2391 - acc: 0.9175 - val_loss: 1.5585 - val_acc: 0.7400 Epoch 10/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.1825 - acc: 0.9317 - val_loss: 1.2357 - val_acc: 0.7567 &lt;tensorflow.python.keras.callbacks.History at 0x2541c52eda0&gt;</code></pre> <pre><code class="language-python"># 评估模型 loss,accuracy = model.evaluate(x_test,y_test) print('\ntest loss',loss) print('accuracy',accuracy)</code></pre> <pre><code>300/300 [==============================] - 2s 5ms/step test loss 1.2356648842493694 accuracy 0.7566666666666667</code></pre> <pre><code class="language-python">model.save('./model.hdf5')</code></pre> <pre><code class="language-python"># 评估模型 loss,accuracy = model.evaluate(x_test,y_test) print('\ntest loss',loss) print('accuracy',accuracy)</code></pre> <pre><code>300/300 [==============================] - 3s 11ms/step test loss 1.2356648842493694 accuracy 0.7566666666666667</code></pre> <pre><code class="language-python">model = load_model('./model.hdf5') model.fit(x_train, y_train, batch_size=5, epochs=10, verbose=1, validation_data=(x_test, y_test))</code></pre> <pre><code>Train on 1200 samples, validate on 300 samples Epoch 1/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.2081 - acc: 0.9300 - val_loss: 1.3258 - val_acc: 0.7600 Epoch 2/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.1961 - acc: 0.9233 - val_loss: 1.2621 - val_acc: 0.7800 Epoch 3/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.1905 - acc: 0.9358 - val_loss: 1.2708 - val_acc: 0.7367 Epoch 4/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.1940 - acc: 0.9267 - val_loss: 1.4250 - val_acc: 0.7367 Epoch 5/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.1735 - acc: 0.9417 - val_loss: 1.7876 - val_acc: 0.7467 Epoch 6/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.1955 - acc: 0.9333 - val_loss: 1.8605 - val_acc: 0.7367 Epoch 7/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.1729 - acc: 0.9367 - val_loss: 1.8445 - val_acc: 0.7367 Epoch 8/10 1200/1200 [==============================] - 50s 42ms/step - loss: 0.1786 - acc: 0.9358 - val_loss: 1.8872 - val_acc: 0.7200 Epoch 9/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.1411 - acc: 0.9408 - val_loss: 1.5552 - val_acc: 0.7233 Epoch 10/10 1200/1200 [==============================] - 50s 41ms/step - loss: 0.1652 - acc: 0.9417 - val_loss: 1.8364 - val_acc: 0.7733 &lt;tensorflow.python.keras.callbacks.History at 0x2541caaa3c8&gt;</code></pre> <pre><code class="language-python"># 评估模型 loss,accuracy = model.evaluate(x_test,y_test) print('\ntest loss',loss) print('accuracy',accuracy)</code></pre> <pre><code>300/300 [==============================] - 2s 5ms/step test loss 1.836436243057251 accuracy 0.7733333341280619</code></pre> <pre><code class="language-python">test_app = np.append(X_img,X_img)</code></pre> <pre><code class="language-python">test_app.shape</code></pre> <pre><code>(589824000,)</code></pre> <pre><code class="language-python">X_img.shape</code></pre> <pre><code>(1500, 256, 256, 3)</code></pre> <h3>拼接</h3> <p><code>np.concatenate((a,b),axis=0)</code> axis = 0进行第一列拼接</p> <p>axis 第几维进行拼接</p> <pre><code class="language-python"> test_con = np.concatenate((X_img,X_img),axis=0)</code></pre> <pre><code class="language-python">test_con.shape</code></pre> <pre><code>(3000, 256, 256, 3)</code></pre> <pre><code class="language-python">test_con_h = np.concatenate((X_img,X_img),axis=1)</code></pre> <pre><code class="language-python">test_con_h.shape</code></pre> <pre><code>(1500, 512, 256, 3)</code></pre> <pre><code class="language-python">test_con_h = np.concatenate((X_img,X_img),axis=2) print(test_con_h.shape)</code></pre> <pre><code>(1500, 256, 512, 3)</code></pre>

页面列表

ITEM_HTML