目的:在tensorflow框架code中使用keras的Imagedatagenerator,另外还要成功编译一个c++的cuda程序sh
环境:ubuntu16.04(真机双系统下)anaconda虚拟环境 python3.6 tensorflow1.12 keras2.24
{protobuf3.6.1!!!!!}
画布多说先上tensorlflow库的各个版本对照!!!!太太太重要了
TensorFlow-1.12¶
tensorflow库版本
由于前期操作的不确定性,并没有留图作例,但是希望自己总结到的东西能帮助到你。
tensorflow和keras的匹配问题
首先tensorflow自己需要匹配好cuda cudnn list of env
keras要选择对应tensorflow版本的,比如我这里选择安装老版本的tensorflow1.12,对应的keras版本的是2.24,好了这一点注意到了。
运行 import tensorflow或者keras会出现 各种奇怪的bug,最多的就是xxx找不到,当然第一选择是去把提示找不到的包给装上,然后继续出现xxx又找不到!wtf?什么玩意儿!
查了一通都是各种安包解决找不到的问题,尝试了下放弃了
最后回去查tensorflow1.12的对应包版本,发现protobuf版本高了最新的都3.11×了,tf1.12给的才3.6.1,感觉有戏,试了下果然搞定了。
虽然是关键一步,比按照提示装包也简单太多,但是想不到就很惨,换tf1.15又需要换cuda和cudnn就来回折腾。
这里也是我最想提的,就是在安装老版本tf的时候,尤其是各种框架配合使用的时候,一定要去看发行版对应的各种库的版本,先保证这一步,比出现xx找不到,一个一个解决靠谱,那是个无底洞!!找不到就是没有,没有就是版本布匹配,要么升要么降级!对于哪些要升降级,这个感觉就是经验,像pip这种最新版一般没问题,而且有些时候需要新版,protobuf numpy 这些比较核心的包建议别求新。
keras测试代码:
import keras
from keras.preprocessing.image import ImageDataGenerator
import numpy as np
import time
imgs = np.random.randint(0,10,size=(7,100,100,3))
datagen=ImageDataGenerator(
featurewise_center=True,
featurewise_std_normalization=True,
rotation_range=20, width_shift_range=0.2,
height_shift_range=0.2, horizontal_flip=True
)
f=datagen.flow(imgs,[0,1,2,3,4,5,6],batch_size=3)
for index,(x,y) in enumerate(f):
if index==10:
break
time.sleep(1)
print(x.shape,y)
结果:
Using TensorFlow backend.
/home/××××/.conda/envs/tf3/lib/python3.6/site-packages/keras_preprocessing/image/image_data_generator.py:716: UserWarning: This ImageDataGenerator specifies `featurewise_center`, but it hasn't been fit on any training data. Fit it first by calling `.fit(numpy_data)`.
warnings.warn('This ImageDataGenerator specifies '
/home/boss-lio/.conda/envs/tf3/lib/python3.6/site-packages/keras_preprocessing/image/image_data_generator.py:724: UserWarning: This ImageDataGenerator specifies `featurewise_std_normalization`, but it hasn't been fit on any training data. Fit it first by calling `.fit(numpy_data)`.
warnings.warn('This ImageDataGenerator specifies '
(3, 100, 100, 3) [6 4 3]
(3, 100, 100, 3) [5 0 1]
(1, 100, 100, 3) [2]
(3, 100, 100, 3) [4 1 3]
(3, 100, 100, 3) [6 2 5]
(1, 100, 100, 3) [0]
(3, 100, 100, 3) [6 2 5]
(3, 100, 100, 3) [1 4 0]
(1, 100, 100, 3) [3]
(3, 100, 100, 3) [6 2 3]