我有一个GridView显示一些图标.
在我从Android开发者网站上有效地阅读这个显示位图之前,我正在从getView()适配器直接解码本地路径中的位图,如下所示:
public View getView(int position, View convertView, ViewGroup parent) {
...
ImageView icon = ...... (from getTag() of convertView)
icon.setImageBitmap(BitmapUtil.decode(iconPath));
...
}
Run Code Online (Sandbox Code Playgroud)
这种方式无论如何工作正常,我称之为[直接模式],getView()方法的输出日志应该是:
getView(0) // measure kid's layout.
getView(0)
getView(1)
getView(2)
...
getView(n) // when scrolling gridview.
getView(n+1)
...
getView(n+3) // scrolling again.
getView(n+4)
...
Run Code Online (Sandbox Code Playgroud)
然后我试图将代码更改为有效显示位图的文章中提到的[Loader Mode] ,如下所示:
public View getView(int position, View convertView, ViewGroup parent) {
...
ImageView icon = ...... (from getTag() of convertView)
loadIcon(icon, …Run Code Online (Sandbox Code Playgroud) 我正在使用tensorflow数据集api作为我的训练数据,输入tf.data.Dataset.from_generator api的生成器和生成器
def generator():
......
yield { "x" : features }, label
def input_fn():
ds = tf.data.Dataset.from_generator(generator, ......)
......
feature, label = ds.make_one_shot_iterator().get_next()
return feature, label
Run Code Online (Sandbox Code Playgroud)
然后我为我的Estimator创建了一个自定义的model_fn,代码如下:
def model_fn(features, labels, mode, params):
print(features)
......
layer = network.create_full_connect(input_tensor=features["x"],
(or layer = tf.layers.dense(features["x"], 200, ......)
......
Run Code Online (Sandbox Code Playgroud)
训练时:
estimator.train(input_fn=input_fn)
Run Code Online (Sandbox Code Playgroud)
但是,代码不起作用,因为函数model_fn的features参数是:
Tensor("IteratorGetNext:0",dtype = float32,device =/device:CPU:0)
代码"features ["x"]"将失败告诉我:
......"site-packages\tensorflow\python\ops\array_ops.py",第504行,在_SliceHelper中end.append(s + 1)TypeError:必须是str,而不是int
如果我将input_fn更改为:
input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": np.array([[1,2,3,4,5,6]])},
y=np.array([1]),
Run Code Online (Sandbox Code Playgroud)
代码继续,因为现在的功能是一个字典.
我搜索了估算器的代码,发现它使用了一些函数,如
features, labels = self._get_features_and_labels_from_input_fn(
input_fn, model_fn_lib.ModeKeys.TRAIN)
Run Code Online (Sandbox Code Playgroud)
从input_fn检索功能和标签,但我不知道为什么它通过使用不同的数据集实现通过我(model_fn)两种不同的数据类型的功能,如果我想使用我的生成器模式,那么如何使用该类型(IteratorGetNext )功能?
谢谢你的帮助!
[更新]
我对代码做了一些改动,
def generator():
......
yield …Run Code Online (Sandbox Code Playgroud)